在Python中向现有文件前添加一行

91 投票
14 回答
107334 浏览
提问于 2025-04-16 08:35

我需要在一个文本文件的第一行添加一行内容,但我发现用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让很多事情变得简单,它有很多库和工具可以处理常见的操作,但它的目的并不是要隐藏一些基本的真理。

你在这里遇到的基本真理是:一般来说,你不能在一个已经存在的简单结构前面添加数据,而不需要重写整个结构。这一点在任何编程语言中都是适用的。

确实有一些方法可以保存文件句柄,或者让你的代码看起来不那么清晰,很多其他的回答中都有提到,但这些方法都不会改变基本的操作:你必须先读取现有的文件,然后写入你想要添加的数据,最后再写入你刚才读取的现有数据。

当然,你可以保存文件句柄,但不要试图把这个操作压缩成尽可能少的代码行。实际上,永远不要追求最少的代码行数——那样只会让事情变得复杂,而不是编程。

撰写回答