如何修改文件并仅将更改写入磁盘 - 基本上是sed(python)?

2 投票
6 回答
584 浏览
提问于 2025-04-16 00:49

假设我有一个文件叫做 /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”多一个字母,所以你至少得从那个地方开始重写文件。文件系统不支持把文件内容上下移动。

如果文件很小,其实没必要这么麻烦,直接重写整个文件就行了。

如果文件非常大,那你就需要重新考虑一下文件内容的内部结构,比如可以考虑用块状的方法来处理。

撰写回答