Форматирование вывода на консоль

У меня проблемы с выравниванием текста на Python. Я перепробовал все, что знал, но результат все тот же, и это очень раздражает!

Вот что я получаю в консоли

Вот код, который у меня есть.

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

6 ответов

Решение

Использование %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"

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

Например

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

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

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

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

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

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

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

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

Посмотрите документы Python по форматированию строк для получения более подробной информации, которая поможет вам выстроить выходные данные именно так, как вам нравится.

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

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

Я предлагаю использовать только с ними что-то вроде

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

вместо этого:

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

Для тех, кто интересуется, как это сделать в python 3:

Вы можете сделать это выравнивание терминала, используя f-строки

      # assigning list values to the variables
names = ['Raj', 'Shivam', 'Shreeya', 'Kartik']
marks = [7, 9, 8, 5]
div = ['A', 'A', 'C', 'B']
id = [21, 52, 27, 38]
  
# printing Aligned Header
print(f"{'Name' : <10}{'Marks' : ^10}{'Division' : ^10}{'ID' : >5}")
  
# printing values of variables in Aligned manner
for i in range(0, 4):
    print(f"{names[i] : <10}{marks[i] : ^10}{div[i] : ^10}{id[i] : >5}")

Выход:

      Name        Marks    Division    ID
Raj           7         A        21
Shivam        9         A        52
Shreeya       8         C        27
Kartik        5         B        38

кредит: https://www.geeksforgeeks.org/string-alignment-in-python-f-string/

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

то есть: текстовая таблица

Другие вопросы по тегам