在Python中向现有文件前添加一行
我需要在一个文本文件的第一行添加一行内容,但我发现用Python实现这个功能的代码比我想象的要多。像这样:
f = open('filename','r')
temp = f.read()
f.close()
f = open('filename', 'w')
f.write("#testfirstline")
f.write(temp)
f.close()
难道没有更简单的方法吗?另外,我发现很多时候人们使用两个句柄来处理文件,而不是用一个句柄同时进行读和写('r+')——这是为什么呢?
14 个回答
27
另一种方法:
with open("infile") as f1:
with open("outfile", "w") as f2:
f2.write("#test firstline")
for line in f1:
f2.write(line)
或者可以用一行代码来实现:
open("outfile", "w").write("#test firstline\n" + open("infile").read())
感谢你让我思考这个问题 :)
祝好
99
我会坚持把读取和写入分开,不过我们确实可以用更简洁的方式来表达每个操作:
with open('filename', 'r') as original:
data = original.read()
with open('filename', 'w') as modified:
modified.write("new first line\n" + data)
115
Python让很多事情变得简单,它有很多库和工具可以处理常见的操作,但它的目的并不是要隐藏一些基本的真理。
你在这里遇到的基本真理是:一般来说,你不能在一个已经存在的简单结构前面添加数据,而不需要重写整个结构。这一点在任何编程语言中都是适用的。
确实有一些方法可以保存文件句柄,或者让你的代码看起来不那么清晰,很多其他的回答中都有提到,但这些方法都不会改变基本的操作:你必须先读取现有的文件,然后写入你想要添加的数据,最后再写入你刚才读取的现有数据。
当然,你可以保存文件句柄,但不要试图把这个操作压缩成尽可能少的代码行。实际上,永远不要追求最少的代码行数——那样只会让事情变得复杂,而不是编程。