2012-06-28 77 views
6

我很難讓python打印出正確對齊的文本。我已經嘗試了我所知道的一切,但仍然是相同的結果,這是非常煩人的!格式化控制檯輸出

以下是我在控制檯 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

謝謝你,這個偉大工程:),我可以問你爲什麼要使用'type'作爲函數參數之一? – cyberbemon

+1

erm ...應該是binary_type或其他... type是一個不錯的選擇名稱,因爲它已經是python中的一個函數了...它仍然可以工作,但不是一個好的風格...所以我修復了它up above :) –

+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的整數值零填充的空間,和5位爲(小數點後空間2的值)的浮子。您也可以在這裏使用-來控制對齊。還有許多其他選項可用於格式化輸出,請參閱下面的建議鏈接瞭解更多詳細信息。

請注意,鼓勵使用.format()功能。請參閱我的answer here關於如何使用.format()。這answer也可能有所幫助。

雖然.format看起來很冗長,但確實提供了很大的靈活性,我最喜歡的功能之一是能夠輕鬆打印大量的逗號以提高可讀性。

Python docs on String Formatting爲更多的細節來幫助你排隊的輸出只是正是你喜歡的方式。

2

如果您使用字符串格式與padding,例如,您可以簡化它很多。

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

您可以使用第三方模塊將輸出格式化爲控制檯。

即: texttable

2

我建議使用ljust與他們一樣

print files.ljust(20) + 'Passed'.ljust(5) + '64-bit' 

,而不是一些這方面的事情:

print" %s \t\t\t\tPASSED\t\t 64-bit \t\t " %files