在文件开头添加行
我可以通过一个单独的文件来做到这一点,但我该怎么把一行加到文件的开头呢?
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是允许在原地重写一行的关键;接下来的行必须向前或向后移动,以便进行原地操作,但我不太了解这个机制是怎么运作的。