在Python中使用分隔符打印表的最佳方法是什么

时间:2009-02-24 20:56:53

标签: python coding-style

我想打印一个混合了字符串和浮点值的表,作为制表符分隔的输出打印输出。当然,我可以完成工作:

>>> 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中使用它,至少用指定的分隔符打印每一行,如果不是整个表。很少的谷歌搜索(来自here),它已经缩短了:

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

还有更好的,或更多的Python方法吗?

6 个答案:

答案 0 :(得分:17)

您的简短解决方案可以快速而肮脏地运作。但是,如果您需要处理大量数据,最好使用csv模块:

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

此解决方案的好处是您可以轻松自定义输出格式的所有方面:分隔符,引号,列标题,转义序列......

答案 1 :(得分:4)

我认为它不会比你的第二个代码片段好多了......也许,如果你真的想要,

print "\n".join("\t".join(str(col) for col in row) for row in tab)

答案 2 :(得分:2)

import sys
import csv

writer = csv.writer(sys.stdout, dialect=csv.excel_tab)
tab = [['a', 1], ['b', 2]]
writer.writerows(tab)

答案 3 :(得分:0)

请不要使用concatanation,因为它每次都会创建一个新的字符串。 cStringIO.StringIO将更有效地完成这类工作。

答案 4 :(得分:0)

这取决于为什么要输出,但如果您只是想直观地引用数据,则可能需要尝试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]]
>>>

答案 5 :(得分:0)

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)