эффективный способ печати списков в таблицу в файле .txt с использованием Python - PullRequest
1 голос
/ 01 октября 2011

Я хочу создать текстовый файл, который содержит таблицу, созданную из списков. Но я не хочу делать что-то вроде этого:

import string
print >> textfile, string.rjust(listname[0],3), string.rjust(listname[1],3),

Следующий код демонстрирует идею того, что я хотел бы сделать, но не работает:

import string
listname = ['test1','test2','test3']
i=0
for i in range(0,3):
   print >> textfile, string.rjust(listname[i],5)

Я бы хотел, чтобы вывод выглядел в точности так:

test1   test2   test3

Это то, что я пытаюсь сделать, и как это имеет смысл в моей голове, но, очевидно, это не будет (и не работает).

Я использовал функцию join(), чтобы красиво печатать списки, но я не могу получить правильный интервал для таблицы.

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 01 октября 2011

Если я правильно понимаю проблему, вы можете просто сделать это ...

>>> def print_table():
...     headers = ['One', 'Two', 'Three']
...     table = [['test1', 2, 3.0],
...             ['test4', 5, 6.0],
...             ['test7', 8, 9.0],
...             ]
...     print ''.join(column.rjust(10) for column in headers)
...     for row in table:
...         print ''.join(str(column).rjust(10) for column in row)
... 
>>> 
>>> print_table()
       One       Two     Three
     test1         2       3.0
     test4         5       6.0
     test7         8       9.0
>>> 

Нет необходимости в модуле string или целых числах для индексации в таблице.

Я напечатал стандарт для ясности, но вы можете написать в файл так же легко.

1 голос
/ 01 октября 2011

Что вы имеете в виду, что он не работает?

Прежде всего, rjust собирается включить символы в строку.Похоже, что вы хотите, чтобы rjust из около 8, чтобы получить интервал, который вы ищете с такими строками, как "test1".

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

print >> textfile, string.rjust(listname[i],8),

Затем, после того, как вы вышли из цикла, вам нужно напечатать новую строку:

print >> textfile

Теперь у нас есть пробел в началелиния, потому что мы rjust первый элемент в списке.Вы на самом деле, вероятно, хотите такое поведение, потому что тогда столбцы выстроятся в линию, другой вариант - использовать ljust.


Некоторые незначительные предложения по стилю:

  • i=0 ничего не делает здесь;оно будет перезаписано
  • for item in listname, вероятно, лучше, чем то, что вы делаете range.
  • вместо string.rjust, вам нужно просто вызвать rjust для самой строки,как: listname[i].rjust(8)

Если вы хотите быть хитрым с join и пониманием списка, вы можете сделать:

print >> textfile, ' '.join(item.rjust(8) for item in listname)

Это делает rjust на все элементы, затем соединяет их вместе пробелом (здесь вы также можете использовать пустую строку).

1 голос
/ 01 октября 2011

Подумайте, наиболее эффективный способ - сгенерировать строку с использованием метода .join, а затем выполнить одну операцию записи в файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...