2012-06-28 3 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

Спасибо, это прекрасно работает :), могу ли я спросить вас, почему вы используете 'type' как одна из функций args? – cyberbemon

+1

erm ... должно быть binary_type или что-то ... type - это плохой выбор имени, поскольку он уже является функцией в python ... он все равно будет работать, но не будет хорошего стиля ... поэтому я исправил его вверху :) –

+1

Или ['str.ljust'] (http://docs.python.org/library/stdtypes.html#str.rjust) для краткости –

4

На месте вкладок, то лучше использовать директивы форматирования строки, где можно указать точное количество пробелов и зарезервировать для вывода.

Например

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

будет резервировать 20 мест и права -align этой строки для отображения. Вы можете оставили -justify него с помощью %-20s

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

Числа могут быть заданы с помощью d для целых чисел и f для значений с плавающей точкой. Например,

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

В этом примере я зарезервировал 3 нулей пространства для целочисленного значения, и 5 мест для поплавка (2 для значений после десятичного пространства). Вы также можете контролировать alignemnt с -. Есть много других вариантов форматирования вывода, см. Предлагаемые ссылки ниже для более подробной информации.

Обратите внимание, что рекомендуется использовать функцию .format(). См. SO my answer here о том, как использовать .format(). Это может также помочь answer.

Хотя .format может показаться очень многословным, он предлагает большую гибкость, и одна из моих любимых функций - возможность легко печатать запятые в больших количествах для удобства чтения.

Подробнее см. В разделе Python docs on String Formatting, чтобы помочь вам выстроить свой результат точно так, как вам хотелось бы.

2

Вы можете упростить его, если используете форматирование строк с помощью padding, например.

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

Вы можете использовать сторонний модуль для форматирования вывода на консоль.

i.e.: 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 
Смежные вопросы