Python Search and Replace дублирует строку замены? - PullRequest
2 голосов
/ 23 марта 2012

У меня есть следующий код, который просматривает файлы в папке и выполняет простой поиск и замену, а затем выводит результаты в другую папку.Я замечаю, что строка замены применяется дважды.

Например:

Search string: foo

Replace string: foo bar

Result: foo bar bar

Вот мой код.Я уверен, что проблема очевидна, но я просто не могу разобраться в этом.

def SearchReplace(directory, search, replace, filePattern):
    for path, dirs, files in os.walk(os.path.abspath(directory)):
        for filename in fnmatch.filter(files, filePattern):
            filepath = os.path.join(path, filename)
            outfile = os.path.join(outputdir, filename)
            with open(filepath) as f:
                s = f.read()
            s = s.replace(search, replace)
            with open(outfile, "w") as f:
                f.write(s)
SearchReplace(inputdir, searchstr, replacestr, ext)

ПРИМЕЧАНИЕ: если я не выведу результаты в отдельную папку, поиск / замена будет выполняться какожидается.Это означает, что приведенный ниже код работает нормально (изменяет входной файл в той же папке):

def SearchReplace(directory, search, replace, filePattern):
    for path, dirs, files in os.walk(os.path.abspath(directory)):
        for filename in fnmatch.filter(files, filePattern):
            filepath = os.path.join(path, filename)
            with open(filepath) as f:
                s = f.read()
            s = s.replace(search, replace)
            with open(filepath, "w") as f:
                f.write(s)
SearchReplace(inputdir, searchstr, replacestr, ext)

Однако мне нужно вывести результаты в отдельную папку.

1 Ответ

2 голосов
/ 23 марта 2012

Проблема в том, что ваша выходная папка включена в шаблон поиска ввода, поэтому замена выполняется один раз во входном файле, а затем снова в выходном файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...