Написание разграниченного текста белого пространства, чтобы быть читаемым человеком в Python

StackOverflow https://stackoverflow.com/questions/3689936

Вопрос

У меня есть список списков, которые выглядят что-то подобное:

data = [['seq1', 'ACTAGACCCTAG'],
        ['sequence287653', 'ACTAGNACTGGG'],
        ['s9', 'ACTAGAAACTAG']]

Я пишу информацию в файл, как это:

for i in data:
    for j in i:
        file.write('\t')
        file.write(j)
    file.write('\n')

Вывод выглядит так:

seq1   ACTAGACCCTAG  
sequence287653   ACTAGNACTGGG  
s9   ACTAGAAACTAG  

Столбцы не выделяются аккуратно из-за изменений в длине первого элемента в каждом внутреннем списке. Как я могу написать соответствующие количества пробелов между первыми и вторыми элементами, чтобы сделать вторую колонну линию для чистябольности человека?

Это было полезно?

Решение

Вам нужен строка формата:

for i,j in data:
    file.write('%-15s %s\n' % (i,j))

%-15s означает, что оправдают 15-космическое поле для строки. Вот вывод:

seq1            ACTAGACCCTAG
sequence287653  ACTAGNACTGGG
s9              ACTAGAAACTAG

Другие советы

data = [['seq1', 'ACTAGACCCTAG'],
        ['sequence287653', 'ACTAGNACTGGG'],
        ['s9', 'ACTAGAAACTAG']]
with open('myfile.txt', 'w') as file:
    file.write('\n'.join('%-15s %s' % (i,j) for i,j in data) )

Для меня даже яснее выражения с петлей

"%10s" % obj обеспечит минимум 10 пробелов со строковым представлением obj, выровненного справа.

"%-10s" % obj делает то же самое, но выравнивается слева.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top