打开文件,读取、处理并写回 - Python中最简短的方法

13 投票
6 回答
10339 浏览
提问于 2025-04-11 09:30

我想对一个文件进行一些基本的过滤操作。也就是说,先读取文件,处理一下,然后再把结果写回去。

我不是想要把代码写得特别简短,而是希望找到一种最简单、最优雅的方法来实现这个目标。我想到了以下的做法:

from __future__ import with_statement

filename = "..." # or sys.argv...

with open(filename) as f:
    new_txt = # ...some translation of f.read() 

open(filename, 'w').write(new_txt)

使用 with 语句可以让代码更简洁,因为我不需要手动打开和关闭文件。

还有其他的想法吗?

6 个回答

3

这看起来是有效的:

with open(filename, "r+") as f:
    new_txt = process(f.read())
    f.truncate(0)
    f.write(new_txt)
4

我会选择另一种优雅的方式:把你的文件读取和过滤操作做成生成器。这样虽然代码行数会多一些,但代码会更灵活、更容易维护,而且性能也会更好。

可以看看David M. Beazley的《系统程序员的生成器技巧》,这是任何写这种代码的人都应该阅读的重要内容。

26

其实,有一种更简单的方法可以使用fileinput,方法是使用inplace参数:

import fileinput
for line in fileinput.input (filenameToProcess, inplace=1):
    process (line)

如果你使用inplace参数,它会把输出重定向到你的文件里,这样当你使用print的时候,它就会把内容写回到你的文件中。

这个例子是给你的文件添加行号:

import fileinput

for line in fileinput.input ("b.txt",inplace=1):
    print "%d: %s" % (fileinput.lineno(),line),

撰写回答