使用Python高效地将列表打印到.txt文件的表格中
我想创建一个文本文件,里面有一个表格,这个表格是从列表生成的。但是,我不想像这样做:
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 个回答
1
你说它不工作是什么意思呢?
首先,rjust
这个函数会把字符串里的字符都包含进去。看起来你想要把像"test1"
这样的字符串右对齐到大约8个字符的宽度,这样就能得到你想要的空格效果。
其次,因为你的打印语句后面没有逗号,所以每个内容都会在新的一行打印出来。你可能想要的是这样的:
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
我觉得最有效的方法是先用 .join
方法生成一个字符串,然后再一次性写入文件。
2
如果我理解这个问题没错的话,你可以这样做...
>>> 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
模块或者用整数来查找表格里的内容。
我为了让你更清楚,打印到了标准输出,但你也可以很简单地写入一个文件。