使用Python高效地将列表打印到.txt文件的表格中

1 投票
3 回答
7244 浏览
提问于 2025-04-17 03:28

我想创建一个文本文件,里面有一个表格,这个表格是从列表生成的。但是,我不想像这样做:

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 模块或者用整数来查找表格里的内容。

我为了让你更清楚,打印到了标准输出,但你也可以很简单地写入一个文件。

撰写回答