Каков наилучший способ печати таблицы с разделителями в Python - PullRequest
4 голосов
/ 24 февраля 2009

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

>>> tab = [['a', 1], ['b', 2]]
>>> for row in tab:
...     out = ""
...     for col in row:
...             out = out + str(col) + "\t"
...     print out.rstrip()
... 
a   1
b   2

Но я чувствую, что есть лучший способ сделать это в Python, по крайней мере, печатать каждую строку с указанным разделителем, если не всю таблицу. Немного погуглил (от здесь ) и он уже короче:

>>> for row in tab:
...     print "\t".join([str(col) for col in row])
... 
a   1
b   2

Есть ли еще лучший или более Python-иш способ сделать это?

Ответы [ 6 ]

17 голосов
/ 25 февраля 2009

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

import sys, csv
writer = csv.writer(sys.stdout, delimiter="\t")
writer.writerows(data)

Преимущество этого решения состоит в том, что вы можете легко настроить все аспекты формата вывода: разделитель, кавычки, заголовки столбцов, escape-последовательности ...

4 голосов
/ 25 февраля 2009

Не думаю, что это станет намного лучше, чем ваш второй фрагмент кода ... возможно, если вы действительно хотите,

print "\n".join("\t".join(str(col) for col in row) for row in tab)
2 голосов
/ 25 февраля 2009
import sys
import csv

writer = csv.writer(sys.stdout, dialect=csv.excel_tab)
tab = [['a', 1], ['b', 2]]
writer.writerows(tab)
0 голосов
/ 07 июля 2017

Библиотека prettytable может быть полезна. Это также помогает поддерживать выравнивание столбцов и позволяет выполнять дополнительные настройки стиля.

Пример:

# Ref: https://code.google.com/archive/p/prettytable/

import prettytable

# Read the input csv file
with open("input.csv", "r") as input_file:
    table = prettytable.from_csv(input_file)

# Optionally, change the default style
table.set_style(prettytable.PLAIN_COLUMNS)
table.align = "l"
table.valign = "t"

# Write the output ASCII text file
with open("output.txt", "w") as output_file:
    print("{}".format(table.get_string()), file=output_file)

# Optionally, write the output html file
with open("output.html", "w") as output_file:
    print("{}".format(table.get_html_string()), file=output_file)
0 голосов
/ 25 февраля 2009

Это зависит от , почему вы хотите выводить таким образом, но если вы просто хотите визуально ссылаться на данные, вы можете попробовать модуль pprint .

>>> import pprint
>>> for item in tab:
...     pprint.pprint(item, indent=4, depth=2)
...
['a', 1]
['b', 2]
>>>
>>> pprint.pprint(tab, indent=4, width=1, depth=2)
[   [   'a',
        1],
    [   'b',
        2]]
>>>
0 голосов
/ 25 февраля 2009

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

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