Python - 文件I / O代码中的列表理解

时间:2013-02-22 02:00:08

标签: python list io

我想使用列表解析来复制以下代码的功能:

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],而不是一行上的一个数字。

我没有回答'你为什么要那样做?';我只想看看是否可能。谢谢!

编辑:谢谢大家的回复;出于某种原因,我认为列表推导总是封装在[]

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))