2012-10-02 12 views
45

मुझे सिर्फ टेक्स्ट की निश्चित चौड़ाई कॉलम चाहिए, लेकिन स्ट्रिंग्स बाएं की बजाय सभी गद्दीदार हैं !! !!एक निश्चित चौड़ाई स्ट्रिंग संरेखित कैसे छोड़ें?

sys.stdout.write("%6s %50s %25s\n" % (code, name, industry)) 

BGA        BEGA CHEESE LIMITED Food Beverage & Tobacco 
BHP        BHP BILLITON LIMITED     Materials 
BGL        BIGAIR GROUP LIMITED Telecommunication Services 
BGG   BLACKGOLD INTERNATIONAL HOLDINGS LIMITED     Energy 

पैदा करता है, लेकिन हम चाहते हैं

BGA BEGA CHEESE LIMITED        Food Beverage & Tobacco 
BHP BHP BILLITON LIMITED        Materials 
BGL BIGAIR GROUP LIMITED        Telecommunication Services 
BGG BLACKGOLD INTERNATIONAL HOLDINGS LIMITED   Energy 
+0

shweet! धन्यवाद ... यह बहुत आसान होना था। umm अब 3 एक साथ सही उत्तरों के साथ जो हरे रंग की टिक प्राप्त करता है? –

उत्तर

89

आप - साथ आकार आवश्यकता उपसर्ग कर सकते हैं बाएं सही ठहराने के लिए:

sys.stdout.write("%-6s %-50s %-25s\n" % (code, name, industry)) 
+0

अच्छा समाधान। यह सबसे अच्छा समाधान है। – SuB

24
sys.stdout.write("%-6s %-50s %-25s\n" % (code, name, industry)) 
एक तरफ

ध्यान दें कि आप के साथ चौड़ाई चर बना सकते हैं *-s

>>> d = "%-*s%-*s"%(25,"apple",30,"something") 
>>> d 
'apple     something      ' 
9

उपयोग -50%+50% के बजाय वे छोड़ दिया करने के लिए गठबंधन किया जाना होगा ..

+0

पूर्व: बाएं इंडेंटेशन के साथ नाम मुद्रित करने के लिए 'प्रिंट "% -30s"% (name) 'प्रिंट करें। – mrsrinivas

36

इस संस्करण str.format विधि का उपयोग करता।

अजगर 2.7 और नए

sys.stdout.write("{:<7}{:<51}{:<25}\n".format(code, name, industry)) 

अजगर 2.6 संस्करण

sys.stdout.write("{0:<7}{1:<51}{2:<25}\n".format(code, name, industry)) 

अद्यतन

% ऑपरेटर के बारे में डॉक्स में एक बयान हटाया जा रहा इससे पहले वहाँ गया था भाषा में से भविष्य। यह कथन removed from the docs रहा है।

+5

पुरानी शैली को अब बहिष्कृत नहीं किया जा रहा है, मेरा मानना ​​है: http://bugs.python.org/issue14123 –

+0

ऐसा लगता है कि समस्या अस्वीकार कर दी गई है। चरण: प्रतिबद्ध/अस्वीकार –

+0

वह स्थिति _also_ "प्रतिबद्ध" को इंगित करने के लिए उपयोग की जाती है, जो यह निश्चित रूप से थी क्योंकि दस्तावेज़ों में परिवर्तन किए गए थे। 3.2 डॉक्स में "ओल्ड स्ट्रिंग फॉर्मेटिंग ऑपरेशंस" अब क्या था [प्रिंटफ-स्टाइल स्ट्रिंग फॉर्मेटिंग] (http://docs.python.org/py3k/library/stdtypes.html#printf-style-string-formatting) 3.3 में । _possible_ बहिष्करण चेतावनी - यह वास्तव में "_may_ दूर जाना" कहा जाता है, यह कभी भी निश्चित नहीं था - अब उस खंड से अनुपस्थित है, इसके बारे में चेतावनी के साथ बदल दिया गया है "quirky"। यह दूर नहीं जा रहा है। –

2

एक से थोड़ा अधिक पठनीय वैकल्पिक समाधान:
sys.stdout.write(code.ljust(5)+name.ljust(20)+industry)

ध्यान दें कि ljust(#ofchars) निश्चित चौड़ाई वर्णों का उपयोग करता है और गतिशील रूप से अन्य समाधान की तरह समायोजित नहीं होता।

4

यह एक मेरे अजगर स्क्रिप्ट में काम किया:

print "\t%-5s %-10s %-10s %-10s %-10s %-10s %-20s" % (thread[0],thread[1],thread[2],thread[3],thread[4],thread[5],thread[6]) 
+0

यह सुनिश्चित नहीं है कि यह किसी और चीज़ से भेदभाव के मामले में क्या जोड़ता है। और बिल्ली क्या धागा सरणी है? – UpAndAdam

0

मैं निश्चित रूप से अधिक format विधि पसंद करते हैं, के रूप में यह बहुत लचीला है और आसानी से __format__ या str या repr अभ्यावेदन परिभाषित करके अपने कस्टम वर्गों के लिए बढ़ाया जा सकता है । इसे सरल रखने के लिए, मैं निम्नलिखित उदाहरणों में print का उपयोग कर रहा हूं, जिसे sys.stdout.write द्वारा प्रतिस्थापित किया जा सकता है।

सरल उदाहरण: संरेखण/भरने

#Justify/ALign (left, mid, right) 
print("{0:<10}".format("Guido")) # 'Guido  ' 
print("{0:>10}".format("Guido")) # '  Guido' 
print("{0:^10}".format("Guido")) # ' Guido ' 

हम किसी भी अन्य चरित्र

द्वारा स्पेस के स्थान पर align निर्दिष्ट करता है जो ^, < और > भरण चरित्र के बगल में जोड़ सकते हैं
print("{0:.^10}".format("Guido")) #..Guido... 

Multiinput उदाहरण: संरेखित और भरने के कई आदानों

print("{0:.<20} {1:.>20} {2:.^20} ".format("Product", "Price", "Sum")) 
#'Product............. ...............Price ........Sum.........' 

उन्नत उदाहरण

आप अपने कस्टम वर्गों है, तो आप इस प्रकार के रूप में यह str या repr निरूपण है परिभाषित कर सकते हैं :

class foo(object): 
    def __str__(self): 
     return "...::4::.." 

    def __repr__(self): 
     return "...::12::.." 

अब आप उन परिभाषित विधियों को कॉल करने के लिए पाइथन को बताने के लिए !s (str) या !r (repr) का उपयोग कर सकते हैं। यदि कुछ भी परिभाषित नहीं किया गया है, तो पायथन __format__ पर डिफ़ॉल्ट है जिसे ओवरराइट भी किया जा सकता है। एक्स = foo()

print "{0!r:<10}".format(x) #'...::12::..' 
print "{0!s:<10}".format(x) #'...::4::..' 

स्रोत: अजगर आवश्यक संदर्भ, डेविड M बीज़ले, 4 संस्करण

संबंधित मुद्दे