Как заменить строку в каждом файле в каталоге - PullRequest
0 голосов
/ 25 октября 2019

Я пытаюсь заменить на python строку: «XXXXXXXXXXX» новой строкой: «ILoveStackOverflow» в каждом файле в определенной папке (все файлы в папке - xml).

Myкод выглядит следующим образом:

import os, fnmatch

for filename in os.listdir("C:/Users/Francesco.Borri/Desktop/passivo GME"):
if filename.endswith('.xml'):
    with open(os.path.join("C:/Users/Francesco.Borri/Desktop/passivo GME", filename)) as f: 
        content = f.read()
        content = content.replace("XXXXXXXXXXX", "ILoveStackOverflow")
    with open(os.path.join("C:/Users/Francesco.Borri/Desktop/passivo GME", filename), mode="w") as f: #Long Pierre-André answer
        f.write(content)

Следующим шагом будет замена другой строки: «ГГГГ» на число, которое увеличивается каждый раз. Если в моем каталоге 10 файлов и я установил начальный номер 1, первый файл «ГГГГ» будет заменен на 1, второй файл на 2 и так далее до 10.

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Вы рядом. Когда вы открываете файл во второй раз, вы должны открыть его в режиме записи, чтобы иметь возможность писать содержимое.

with open(os.path.join("C:/Users/Francesco.Borri/Desktop/passivo GME", filename), 'w') as f:
    f.write(content)

Как только вы исправите это, я думаю, что вторая часть вашего вопроса просто поддерживаетпеременная, значение которой вы увеличиваете каждый раз при замене строки. Вы можете сделать это вручную (перебрать строку) или использовать функцию замены в цикле for:

with open(os.path.join("C:/Users/Francesco.Borri/Desktop/passivo GME", filename)) as f:
        content = f.read()
for i in range(content.count("YYYY")):
    content.replace("YYYY", str(i), 1)  # or str(i+1)
with open(os.path.join("C:/Users/Francesco.Borri/Desktop/passivo GME", filename), 'w') as f:
        f.write(content)
0 голосов
/ 25 октября 2019
with open(os.path.join("C:/Users/Francesco.Borri/Desktop/passivo GME", filename), mode="w") as f:

Вы должны открыть файл в режиме записи.

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