2012-06-28 15 views
6

मुझे पाइथन प्रिंट आउट ग्रंथों को सही ढंग से गठबंधन करने में परेशानी हो रही है। मैंने जो कुछ भी मुझे पता था, मैंने कोशिश की है, लेकिन फिर भी वही परिणाम है और यह बहुत परेशान है!स्वरूपण कंसोल आउटपुट

यहाँ है कि मैं क्या कोड मैं है सांत्वना enter image description here

यहाँ में हो रही है।

print " FileName\t\t\t\t\tStatus\t\tBinary Type\n" 

for files in PASS: 
    log = subprocess.check_output(['dumpbin','/HEADERS',files]) 
    if arch64 in log: 
     print" %s \t\t\t\tPASSED\t\t 64-bit \t\t " %files 
    elif arch32 in log: 
     print" %s \t\t\t\tPASSED\t\t 32-bit \t\t " %files 
print"\n" 
for files in FAILED: 

    print" %s \t\t\t\t FAILED \t\t  " %files 

print "\n\n 

उत्तर

11

सही वर्णित फ़ील्ड बनाने के लिए %45s का उपयोग करें जो 45 वर्ण लंबा है। और बाईं ओर उचित स्ट्रिंग बनाने के लिए %-45s का उपयोग करें। एक फ़ंक्शन में अपनी लाइन प्रिंटिंग निकालने पर भी विचार करें - इस तरह आप इसे एक ही स्थान पर आसानी से बदल पाएंगे। इस तरह:

# fake setup 
PASS = ["foo.exe", "bar.exe", "really_long_filename.exe"] 
FAILED = ["failed.exe"] 
types = ["32-bit", "64-bit", "64-bit"] 
arch64 = '64' 
arch32 = '32' 

# your code 
def print_row(filename, status, file_type): 
    print " %-45s %-15s %15s" % (filename, status, file_type) 

print_row('FileName', 'Status', 'Binary Type') 

for files in PASS: 
    log = types.pop() 
    if arch64 in log: 
     print_row(files, 'PASSED', '64-bit') 
    elif arch32 in log: 
     print_row(files, 'PASSED', '32-bit') 
print"\n" 

for files in FAILED: 
     print_row(files, 'FAILED', '') 

print "\n\n" 
+0

धन्यवाद, यह काम करता है महान :), मैं तुम्हें पूछ सकते हैं क्यों आप का उपयोग किया था फ़ंक्शन में से एक के रूप में 'टाइप' तर्क देता है? – cyberbemon

+1

erm ... binary_type या कुछ होना चाहिए ... प्रकार नाम की एक खराब पसंद है क्योंकि यह पहले से ही पाइथन में एक फ़ंक्शन है ... यह अभी भी काम करेगा लेकिन अच्छी शैली नहीं है ... इसलिए मैंने इसे ठीक कर दिया है ऊपर ऊपर :) –

+1

या ['str.ljust'] (http://docs.python.org/library/stdtypes.html#str.rjust) संक्षिप्त के लिए –

4

टैब की जगह में, यह स्ट्रिंग स्वरूपण निर्देशों जहां यह रिक्त स्थान की सही संख्या निर्दिष्ट करने के लिए और उत्पादन के लिए आरक्षित किया जा सकता है उपयोग करने के लिए बेहतर है।

उदाहरण

print '>>%20s<<' %('some string') 
>>   some string<< 

के लिए 20 रिक्त स्थान और सही प्रदर्शन के लिए -align इस स्ट्रिंग को आरक्षित होगा। आप %-20s

print '>>%-20s<<' %('some string') 
>>some string   << 

नंबर नाव मूल्यों के लिए पूर्णांकों के लिए d और f का उपयोग कर निर्दिष्ट किया जा सकता का उपयोग करके यह -justify छोड़ सकते हैं। जैसे,

print '%03d %5.2f' %(5, 22/7.0) 
005 3.14 

इस उदाहरण में मैं एक पूर्णांक मूल्य के लिए 3 शून्य गद्देदार रिक्त स्थान, और (दशमलव अंतरिक्ष के बाद 2 मूल्यों के लिए) एक नाव के लिए 5 रिक्त स्थान सुरक्षित। आप - के साथ भी alignemnt को नियंत्रित कर सकते हैं। आउटपुट प्रारूपित करने के लिए कई अन्य विकल्प हैं, अधिक जानकारी के लिए नीचे सुझाए गए लिंक देखें।

ध्यान दें कि .format() फ़ंक्शन का उपयोग प्रोत्साहित किया जाता है। .format() का उपयोग करने के तरीके के बारे में SO answer here देखें। यह answer भी मदद कर सकता है।

जबकि .format बहुत वर्बोज़ लग सकता है, यह लचीलापन का एक बड़ा सौदा प्रदान करता है और मेरी पसंदीदा सुविधाओं में से एक को आसानी से पठनीयता के लिए बड़ी संख्या में कॉमा प्रिंट करने की क्षमता है।

और अधिक जानकारी के लिए Python docs on String Formatting देखें आप अपने उत्पादन सिर्फ सटीक रूप से आपकी चाहें लाइन अप में मदद करेगा।

2

उदाहरण के लिए, यदि आप padding के साथ स्ट्रिंग स्वरूपण का उपयोग करते हैं, तो आप इसे बहुत सरल बना सकते हैं।

>>> '%20s' % 'test' 
'    test' 
>>> '%-20s' % 'test' 
'test    ' 
0

आप कंसोल के लिए उत्पादन फ़ॉर्मेट करने के लिए एक तीसरी पार्टी मॉड्यूल का उपयोग कर सकते हैं।

यानी।: texttable

2

मैं उन लोगों के साथ की तरह

print files.ljust(20) + 'Passed'.ljust(5) + '64-bit' 
बजाय इस बात का

कुछ बात ljust उपयोग करने का सुझाव:

print" %s \t\t\t\tPASSED\t\t 64-bit \t\t " %files 
संबंधित मुद्दे