在文件开头添加行

109 投票
13 回答
193634 浏览
提问于 2025-04-16 17:08

我可以通过一个单独的文件来做到这一点,但我该怎么把一行加到文件的开头呢?

f=open('log.txt','a')
f.seek(0) #get to the first position
f.write("text")
f.close()

因为文件是以追加模式打开的,所以写入是从文件的末尾开始的。

13 个回答

18

为了回应NPE的答案,我认为最有效的方法是:

def insert(originalfile,string):
    with open(originalfile,'r') as f:
        with open('newfile.txt','w') as f2: 
            f2.write(string)
            f2.write(f.read())
    os.remove(originalfile)
    os.rename('newfile.txt',originalfile)
20

在我知道的所有文件系统中,你不能直接在原地修改文件。你需要先用一个辅助文件(然后可以把这个辅助文件重命名为原文件的名字)。

150

在模式 'a''a+' 下,所有的写入操作都会发生在文件的末尾。即使在你调用 write() 函数时,文件指针不在文件末尾,系统也会自动把指针移动到文件的末尾,然后再进行写入。你可以用两种方法来实现你想要的操作。

第一种方法,适合在没有问题的情况下把文件加载到内存中:

def line_prepender(filename, line):
    with open(filename, 'r+') as f:
        content = f.read()
        f.seek(0, 0)
        f.write(line.rstrip('\r\n') + '\n' + content)

第二种方法

def line_pre_adder(filename, line_to_prepend):
    f = fileinput.input(filename, inplace=1)
    for xline in f:
        if f.isfirstline():
            print line_to_prepend.rstrip('\r\n') + '\n' + xline,
        else:
            print xline,

我不太清楚这种方法的内部工作原理,也不知道它是否适用于非常大的文件。传递给输入的参数1是允许在原地重写一行的关键;接下来的行必须向前或向后移动,以便进行原地操作,但我不太了解这个机制是怎么运作的。

撰写回答