如何修改文本文件?


174

我正在使用Python,并且想在不删除或复制文件的情况下将字符串插入文本文件。我怎样才能做到这一点?


1
您可以参考答案由Alex马尔泰利。
Alok 2014年



@Ani其他职位的副本在一个文本文件中指定位置插入行反正肯定有明确的答案组成的这里,为什么不能在此处添加您的答案,而不是其他的方式?接受答案不是一个好问题的要求。
巴尔加夫·饶

@BhargavRao投票已撤回。我应该已经找到重复的了!
阿妮·梅农

Answers:


133

不幸的是,没有重写的方法就无法插入文件的中间。如先前的张贴者所指出的,您可以将文件追加到文件中或使用“搜索”覆盖文件的一部分,但是如果要在文件的开头或中间添加内容,则必须重写它。

这是操作系统,而不是Python。所有语言均相同。

我通常要做的是从文件中读取,进行修改并将其写到名为myfile.txt.tmp或类似名称的新文件中。这比将整个文件读入内存更好,因为文件可能太大了。临时文件完成后,我将其重命名为原始文件。

这是一种很好的安全方法,因为如果文件写入由于任何原因而崩溃或中止,您仍然可以拥有原始文件。


3
像awk / sed这样的unix工具在代码中是否做类似的事情?
Manish Gill 2013年

并非所有语言都一样。在ActionScript中:fileStream.openAsync(filename,FileMode.UPDATE); 然后,我可以在所需文件中的任何位置进行更改。
AndrewBenjamin 2014年

2
@AndrewBenjamin您知道ActionScript正在制作什么系统吗?openAsync是否有可能在调用之后读取文件并写入一个新文件?
AlexLordThorsen 2014年

@Rawrgulmuffins我不知道。但是,我确实知道它不会将整个文件读入内存,因为我已经使用它来处理几GB的文件大小。我怀疑这与使用C#Streamwriter编写相同。我认为python是一种快速完成小事情的工具,而不是大规模开发和文件操作的工具。
AndrewBenjamin 2015年

3
@AndrewBenjamin,用户并没有要求在文件中四处寻找和更改它(我所知道的每种语言都可以做到);他询问的是插入文本,这与简单地更改/覆盖文件中已有的内容不同。也许在实际应用中它有所不同,但是我在ActionScript API中找不到任何东西表明它在这方面的表现与任何其他语言都不同。
eestrada 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.