我想使用列表解析来复制以下代码的功能:
with open('file.txt', 'w') as textfile:
for i in range(1, 6):
textfile.write(str(i) + '\n')
我尝试了以下内容:
with open('file.txt', 'w') as textfile:
textfile.write(str([i for i in range(1, 6)]) + '\n')
但它(可以理解)打印[1, 2, 3, 4, 5]
,而不是一行上的一个数字。
我没有回答'你为什么要那样做?';我只想看看是否可能。谢谢!
编辑:谢谢大家的回复;出于某种原因,我认为列表推导总是封装在[]
。
答案 0 :(得分:8)
执行此操作的一种方法是file.writelines()
:
with open('file.txt', 'w') as textfile:
textfile.writelines(str(i) + "\n" for i in range(1, 6))
答案 1 :(得分:2)
textfile.write('\n'.join(str(i) for i in range(1,6)))
几乎是同样的事情。这将留下一个尾随的换行符。如果您需要,可以这样做:
textfile.write(''.join('{}\n'.format(i) for i in range(1,6)))
答案 2 :(得分:1)
此外,如果您正在编写其他应用程序可以使用的文本,那么您通常会编写CSV文档,csv
模块可以轻松完成这些操作。
(在这种情况下,每行只有一个值,因此可能不需要这样做。)
import csv
with open("file.txt", "wb") as out_f:
writer = csv.writer(out_f)
writer.writerows([[i] for i in range(1, 6)])
注意 csv
模块将负责将 int 转换为 str 。
答案 3 :(得分:0)
您也可以尝试,
with open('/tmp/foo.txt','w') as f:
[f.write(str(i)+' ') for i in range(0,10)]
以@monkut或@mgilson
为例答案 4 :(得分:0)
请尝试以下操作:
open('/tmp/foo.txt','w').writelines(f'{i}\n' for i in range(10))