在Python中添加一行到现有的文件

我需要添加一行到一个文本文件的第一行,它看起来像我可用的唯一选项是更多的代码行比我期望从Python。 像这样的东西:

f = open('filename','r') temp = f.read() f.close() f = open('filename', 'w') f.write("#testfirstline") f.write(temp) f.close() 

有没有更简单的方法? 另外,我更多地看到这个双手柄的例子比打开一个单独的手柄来读写('r +') – 为什么呢?

Python使很多事情变得简单,包含许多常见操作的库和包装器,但是目标不是隐藏基本事实。

你在这里遇到的基本事实是,如果不重写整个结构,你通常不能将数据添加到现有的扁平结构中。 不pipe语言如何,这都是事实。

有一些方法可以保存文件句柄,或者使代码更不可读,其他许多答案都提供了其中的许多方法,但是没有一个可以改变基本操作:您必须读入现有文件,然后写出要添加的数据,然后写出您读取的现有数据。

通过一切手段保存自己的文件句柄,但不要去寻求尽可能less的代码行这个操作。 事实上,不要去寻找最less的代码行 – 这是混淆,而不是编程。

我会坚持单独的读写,但我们当然可以更简洁地expression:

Python2:

 with file('filename', 'r') as original: data = original.read() with file('filename', 'w') as modified: modified.write("new first line\n" + data) 

Python3:

 with open('filename', 'r') as original: data = original.read() with open('filename', 'w') as modified: modified.write("new first line\n" + data) 

注意:file()函数在python3中不可用。

其他方法:

 with open("infile") as f1: with open("outfile", "w") as f2: f2.write("#test firstline") for line in f1: f2.write(line) 

或一个class轮:

 open("outfile", "w").write("#test firstline\n" + open("infile").read()) 

感谢有机会考虑这个问题:)

干杯

 with open("file", "r+") as f: s = f.read(); f.seek(0); f.write("prepend\n" + s) 

你可以用这个保存一个写电话:

 f.write('#testfirstline\n' + temp) 

使用'r +'时,在阅读之后和写作之前,您将不得不倒带文件。

在保持可读性的同时,最简单的方法是:

 with open('filename', 'rw') as testfile: testfile.writelines(['first line'] + testfile.readlines()) 

这样做的工作没有读取整个文件到内存中,但它可能无法在Windows上工作

 def prepend_line(path, line): with open(path, 'r') as old: os.unlink(path) with open(path, 'w') as new: new.write(str(line) + "\n") shutil.copyfileobj(old, new) 

这里是我认为清晰灵活的3class轮。 它使用了list.insert函数,所以如果你真的想要在文件中使用l.insert(0,'insert_str')。 当我正在开发一个Python模块时,我使用了l.insert(1,'insert_str'),因为我想跳过第0行的'# – – coding:utf-8 – – 'string。代码。

 f = open(file_path, 'r'); s = f.read(); f.close() l = s.splitlines(); l.insert(0, 'insert_str'); s = '\n'.join(l) f = open(file_path, 'w'); f.write(s); f.close() 

一种可能性是以下几点:

 import os open('tempfile', 'w').write('#testfirstline\n' + open('filename', 'r').read()) os.rename('tempfile', 'filename') 

如果您希望在特定文本之后在文件中添加,则可以使用下面的function。

 def prepend_text(file, text, after=None): ''' Prepend file with given raw text ''' f_read = open(file, 'r') buff = f_read.read() f_read.close() f_write = open(file, 'w') inject_pos = 0 if after: pattern = after inject_pos = buff.find(pattern)+len(pattern) f_write.write(buff[:inject_pos] + text + buff[inject_pos:]) f_write.close() 

所以首先你打开文件,读取它并将其全部保存到一个string中。 然后,我们试图find注入将发生的string中的字符数字。 然后用一个单一的写入和一些聪明的string索引,我们可以重写整个文件,包括现在注入的文本。