Почему не удаляются квадратные скобки в Python, что с кодом не так?
Данный код удаляет ненужные файлы, и и ненужный текст с имени файла. Так вот, удаление файлов по шаблону работает хорошо, удаление текста по шаблону тоже, но вот как только в имени файла появляются квадратные скобки которые нужно удали вместе с содержимым, скрипт сразу перестает работать. Как с этим бороться? Заранее всею ответивших благодарю!) В примере ниже видно, что просто abc удалится, а вот [abc], не хочет удаляться, я читал про экранирование тут на форуме, перепробовал несколько вариантов, но ничего не помогло(
# Имена файлов, подлежащих удалению.
FILES_FOR_DELETE = [
'Этот файл нужно удалить.txt',
]
# Имена файлов подлежащих переименованию.
# Примеры:
# abc* : 'abc 123.txt' => '123.txt'
FILES_FOR_RENAME = [
'abc*',
'[abc]*'
]
BASE_PATH = '.'
# ======================================================================
import re
from pathlib import Path
from argparse import ArgumentParser
class DeleteAction:
def __init__(self) -> None:
self.removed_files = []
def process(self, file: Path) -> None:
if file.is_file() and file.name in FILES_FOR_DELETE:
file.unlink(missing_ok=True)
self.removed_files.append(file)
def print_result(self) -> None:
print('Удалённые файлы:', *self.removed_files, sep='\n')
class RenameAction:
def __init__(self) -> None:
self.renamed_files = []
self.patterns = [re.sub(r'\*', r'(.*)', pattern) for pattern in FILES_FOR_RENAME]
def process(self, file: Path) -> None:
if not file.is_file():
return
for p in self.patterns:
name, dot, extension = file.name.partition('.')
match = re.fullmatch(p, name)
if match is not None:
new_file = file.replace(file.with_name(''.join(match.groups()).strip() + dot + extension))
self.renamed_files.append((file, new_file))
def print_result(self) -> None:
print('Переименованные файлы:', *[str(old) + ' => ' + str(new) for old, new in self.renamed_files], sep='\n')
parser = ArgumentParser()
parser.add_argument("-d", "--no-delete", dest="no_delete", default=False, action='store_true', help="Не удалять файлы")
parser.add_argument("-r", "--no-rename", dest="no_rename", default=False, action='store_true', help="Не переименовывать файлы")
args = parser.parse_args()
actions = []
if not args.no_delete:
actions.append(DeleteAction())
if not args.no_rename:
actions.append(RenameAction())
for file in Path(BASE_PATH).rglob('*'):
for action in actions:
action.process(file)
for action in actions:
action.print_result()
print()