通过python对文件夹中的所有文件进行搜索和替换?

fru*_*uit 5 python scripting

我想学习使用python作为命令行脚本替换.我过去花了一些时间与python但是已经有一段时间了.这似乎属于它的范围.

我在一个文件夹中有几个文件,我想在所有文件夹中进行搜索和替换.我想用python脚本来做.

例如,搜索并用" foo" 替换" "的所有实例foobar.

Tim*_*ker 5

欢迎来到StackOverflow.既然你想学习自己(+1)我会给你一些指示.

检查os.walk()以获取所有文件.

然后迭代文件中的每一行(for line in currentfile:在这里派上用场).

现在你需要知道你是否想要一个"愚蠢的"替换(找到/替换每个,foo即使它在一个单词的中间(比如foobar- 你想要foofoobar结果?)或智能替换.

对于前者,看看str.replace()后者,看看re.sub()并找出其r'\bfoo\b'意义.


Dav*_*ver 2

perl -pi -e 's/foo/foobar/'通常我会为此删除旧的,但如果你想要Python:

import os
import re
_replace_re = re.compile("foo")
for dirpath, dirnames, filenames in os.walk("directory/"):
    for file in filenames:
        file = os.path.join(dirpath, file)
        tempfile = file + ".temp"
        with open(tempfile, "w") as target:
            with open(file) as source:
                for line in source:
                    line = _replace_re.sub("foobar", line)
                    target.write(line)
        os.rename(tempfile, file)
Run Code Online (Sandbox Code Playgroud)

如果您使用的是 Windows,则需要os.remove(file)os.rename(tempfile, file).