如何修改文件并仅将更改写入磁盘 - 基本上是sed(python)?
假设我有一个文件叫做 /etc/conf1
这个文件的内容大概是这样的:
option = banana
name = monkey
operation = eat
现在我想把里面的“monkey”替换成“ostrich”。我想知道怎么做到这一点,而不需要先把整个文件读到内存里,修改后再写回去。也就是说,我想直接在文件里进行修改。
6 个回答
0
这行命令是用来在文件中查找特定的内容并进行替换的。具体来说,它使用了一个叫做`sed`的工具。
命令的意思是:在名为`file`的文件中,查找以“monkey”结尾的行,然后把这一行的内容替换成“newword”。
这里的`-i.bak`表示在修改文件之前,会先备份一个名为`file.bak`的文件,以防万一你需要恢复原来的内容。
所以,简单来说,这个命令就是在文件中找到特定的内容并替换,同时保留一个备份。这样做可以避免意外删除重要信息。
1
你可以看看fileinput这个模块:
http://docs.python.org/library/fileinput.html
这个模块有一个选项,可以通过输入方法来进行原地编辑:
http://docs.python.org/library/fileinput.html#fileinput.input
更新 - 示例代码:
import fileinput
import re
import sys
for line in fileinput.input(inplace=True):
sys.stdout.write(re.sub(r'monkey', 'ostrich', line))
使用sys.stdout.write,这样就不会多加任何换行符。
2
你不能这样做。“ostrich”这个词比“monkey”多一个字母,所以你至少得从那个地方开始重写文件。文件系统不支持把文件内容上下移动。
如果文件很小,其实没必要这么麻烦,直接重写整个文件就行了。
如果文件非常大,那你就需要重新考虑一下文件内容的内部结构,比如可以考虑用块状的方法来处理。