2012-06-28 43 views
6

Tôi đang gặp sự cố khi in các văn bản in ra đúng cách. Tôi đã thử tất cả mọi thứ tôi biết, nhưng vẫn còn kết quả tương tự và nó rất khó chịu !.Bàn điều khiển định dạng Đầu ra

Đây là những gì tôi nhận được trong giao diện điều khiển enter image description here

Dưới đây là Bộ luật tôi có.

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 

Trả lời

11

Sử dụng %45s để tạo trường hợp lý phải dài 45 ký tự. Và sử dụng %-45s để tạo chuỗi hợp lý trái. Ngoài ra, hãy cân nhắc việc trích xuất dòng in của bạn thành một hàm - theo cách đó bạn sẽ có thể dễ dàng thay đổi nó ở một nơi. Như thế này:

# 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

Cảm ơn bạn, công trình này :) tuyệt vời, tôi có thể hỏi bạn tại sao bạn lại sử dụng 'type' là một trong những hàm args? – cyberbemon

+1

erm ... đáng lẽ phải là binary_type hay cái gì đó ... kiểu là một sự lựa chọn xấu của tên như nó đã là một chức năng trong python ... nó vẫn sẽ hoạt động nhưng không phải là một phong cách tốt ... vì vậy tôi đã sửa nó lên trên :) –

+1

Hoặc ['str.ljust'] (http://docs.python.org/library/stdtypes.html#str.rjust) cho ngắn –

4

Ở vị trí của các tab, tốt hơn là sử dụng chỉ thị định dạng chuỗi để có thể chỉ định chính xác số lượng khoảng trắng và đặt trước đầu ra.

Ví dụ

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

sẽ dành 20 chỗ và đúng -align chuỗi này để trưng bày. Bạn có thể trái -justify nó bằng cách sử dụng %-20s

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

số có thể được xác định bằng d cho số nguyên và f cho các giá trị float. Ví dụ:

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

Trong ví dụ này, tôi đặt trước 3 khoảng trống cho giá trị nguyên và 5 dấu cách cho dấu phẩy (2 cho giá trị sau dấu cách thập phân). Bạn cũng có thể kiểm soát căn chỉnh ở đây với -. Có nhiều tùy chọn khác để định dạng đầu ra, xem các liên kết được đề xuất bên dưới để biết thêm chi tiết.

Lưu ý rằng việc sử dụng chức năng .format() được khuyến khích. Xem SO answer here của tôi về cách sử dụng .format(). Điều này answer cũng có thể hữu ích.

Trong khi .format có vẻ rất tiết, nó cung cấp tính linh hoạt cao và một trong những tính năng yêu thích của tôi là khả năng in dấu phẩy dễ dàng với số lượng lớn để dễ đọc.

Xem Python docs on String Formatting để biết thêm chi tiết để giúp bạn xếp hàng đầu ra của mình chính xác theo cách bạn muốn.

2

Bạn có thể đơn giản hóa nó rất nhiều nếu bạn sử dụng định dạng chuỗi với padding, ví dụ:

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

Bạn có thể sử dụng mô-đun bên thứ ba để định dạng đầu ra cho bảng điều khiển.

tức là: texttable

2

tôi đề nghị sử dụng ljust với họ một số điều như

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

thay vì điều này:

print" %s \t\t\t\tPASSED\t\t 64-bit \t\t " %files 
Các vấn đề liên quan