Удаление строки из нескольких файлов в Python при создании резервной копии

#python #directory #path

#python #каталог #путь

Вопрос:

Мне нужно удалить строку ‘HELLO’ из нескольких файлов .txt в Python. Перед этим я хочу скопировать все эти файлы в папку резервного копирования.

У меня есть мои файлы в папке drc, и я создал резервную папку, но мой код не сохраняет копии в папку резервного копирования, вместо этого он сохраняет их в основную папку проекта.

 drc = 'C:/Users/Bear/Desktop/Project/Files'
backup = 'C:/Users/Bear/Desktop/Project/Backup'
pattern = re.compile('HELLO')
oldstr = 'HELLO'
newstr = ''
for dirpath, dirname, filename in os.walk(drc): 
    for fname in filename:
        path = os.path.join(dirpath, fname)
        backup = './Backup'
        strg = open(path).read()
        if re.search(pattern, strg):
            shutil.copy2(backup, fname) 
            strg = strg.replace(oldstr, newstr) 
            f = open(path, 'w') 
            f.write(strg) 
            f.close() 
 

Иногда я получаю PermissionError: [Errno13] Отказано в разрешении: ‘./Backup’.
Я думаю, что моя проблема заключается в указании путей, также я хотел бы, чтобы мои пути были относительными, а не абсолютными, чтобы кто-то другой мог воспроизвести этот проект.

Ответ №1:

backup Переменная пытается выполнить запись в родительский рабочий каталог Python, а не в каталог, указанный вами вверху.

Строка backup = './Backup' переопределяет это. Определение top никогда не используется.

Вы можете стереть второе определение или использовать dirname(path) для определения родительского каталога и работать оттуда.

Комментарии:

1. Спасибо. Я сделал это, но я получаю PermissionError: [Ошибка № 13] Отказано в разрешении для папки (резервной копии), к которой у меня, очевидно, есть доступ…

2. Какое значение, по словам вашего отладчика backup , находится в точке, где вы получаете эту ошибку?