打开文件,读取、处理并写回 - Python中最简短的方法
我想对一个文件进行一些基本的过滤操作。也就是说,先读取文件,处理一下,然后再把结果写回去。
我不是想要把代码写得特别简短,而是希望找到一种最简单、最优雅的方法来实现这个目标。我想到了以下的做法:
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),