2012-05-16 4 views
35

मैं दोनों के बीच तार में पाठ संरेखित करने के लिए रिक्ति जोड़ने के लिए कोशिश कर रहा हूँ का उपयोग कर "" पाठ दूसरे स्तंभ गठबंधन किया जा रहा के साथ इस तरह देखने के लिए, प्राप्त करने के लिए कोशिश कर रहा है तोअजगर रिक्ति और संरेखित तार

करने के लिए बिना वार्स।

Location: 10-10-10-10  Revision: 1 
District: Tower    Date: May 16, 2012 
User: LOD     Time: 10:15 

वर्तमान में यह इस तरह कोडित है, बस रिक्त स्थान का उपयोग कर ...

"Location: " + Location + "    Revision: " + Revision + '\n' 

मैं string.rjust & srting.ljust साथ लेकिन कोई लाभ नहीं हुआ काम कर की कोशिश की।

सुझाव?

+3

string.ljust आपको जो चाहिए वह करना चाहिए। क्या आप पोस्ट कर सकते हैं जो आपने .ljust क्षेत्र में किया था? – JoeFish

+1

आप हमेशा '" \ t "' –

+0

का उपयोग कर सकते हैं http://stackoverflow.com/questions/1448820/variable-length-of-s-with-the-operator-in-python#1448834 –

उत्तर

50

आप प्रारूप विधि का उपयोग करने में सक्षम होना चाहिए:

"Location: {0:20} Revision {1}".format(Location,Revision) 

आप लेबल की लंबाई के आधार प्रत्येक पंक्ति के लिए प्रारूप लंबाई का पता लगाने के लिए होगा। उपयोगकर्ता लाइन को स्थान या जिला लाइनों की तुलना में व्यापक प्रारूप चौड़ाई की आवश्यकता होगी।

+7

देखें http:/प्रारूप कमांड कैसे काम करता है इसके साथ मदद करने के लिए /docs.python.org/library/string.html#formatspec। –

30

%-*s प्रयास करें %*s और और स्तंभ चौड़ाई के साथ एक स्ट्रिंग उपसर्ग:

>>> print "Location: %-*s Revision: %s" % (20,"10-10-10-10","1") 
Location: 10-10-10-10   Revision: 1 
>>> print "District: %-*s Date: %s" % (20,"Tower","May 16, 2012") 
District: Tower     Date: May 16, 2012 
+2

इच्छा है कि मैं आपको अधिक अपवर्त दे सकता हूं। साफ समाधान, –

+0

बनाने वाली स्ट्रिंग में "*" ऑपरेटर के बारे में नहीं पता था, जो मैं करने की कोशिश कर रहा हूं उसके बहुत करीब है। केवल एक चीज बाकी होगी कि यदि जिला "डीओई" में बदल जाता है तो कॉलम पहले भी उसी स्थान पर होंगे। कॉलम संरेखित होने से पहले 20 वर्णों को कहने से पहले कुछ दूरी तय करने का कोई तरीका है जो पहले कॉलम में मान की लंबाई से स्वतंत्र है? –

+0

हाँ बस इसे एक और कॉलम की तरह व्यवहार करें: '"% -9s% -20s% -9s% -20s "% (" स्थान: "," 10-10-10-10 "," संशोधन: "," 1 ") ' –

18

आप इस तरह expandtabs का उपयोग tabstop निर्दिष्ट करने के लिए कर सकते हैं,:

>>> print ('Location:'+'10-10-10-10'+'\t'+ 'Revision: 1').expandtabs(30) 
>>> print ('District: Tower'+'\t'+ 'Date: May 16, 2012').expandtabs(30) 
#Output: 
Location:10-10-10-10   Revision: 1 
District: Tower    Date: May 16, 2012 
9

@ IronMensan के प्रारूप विधि जवाब है जाने के लिए रास्ता। लेकिन ljust के बारे में अपने प्रश्न का उत्तर देने के हित में:

>>> def printit(): 
...  print 'Location: 10-10-10-10'.ljust(40) + 'Revision: 1' 
...  print 'District: Tower'.ljust(40) + 'Date: May 16, 2012' 
...  print 'User: LOD'.ljust(40) + 'Time: 10:15' 
... 
>>> printit() 
Location: 10-10-10-10     Revision: 1 
District: Tower       Date: May 16, 2012 
User: LOD        Time: 10:15 

इस विधि नोट करने के लिए संपादित करें पता करने के लिए कितनी देर तक अपने तार कर रहे हैं की आवश्यकता नहीं है। .format() भी हो सकता है, लेकिन मैं कहने के लिए पर्याप्त परिचित नहीं हूँ।

>>> uname='LOD' 
>>> 'User: {}'.format(uname).ljust(40) + 'Time: 10:15' 
'User: LOD        Time: 10:15' 
>>> uname='Tiddlywinks' 
>>> 'User: {}'.format(uname).ljust(40) + 'Time: 10:15' 
'User: Tiddlywinks      Time: 10:15'