Python - 文件输入输出中的列表解析

5 投票
5 回答
4423 浏览
提问于 2025-04-17 16:43

我想用列表推导式来实现下面这段代码的功能:

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 个回答

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模块会帮你把整数转换成字符串

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

一种实现这个功能的方法是使用 file.writelines()

with open('file.txt', 'w') as textfile:
    textfile.writelines(str(i) + "\n" for i in range(1, 6))

撰写回答