Ваш код немного сложнее, чем необходимо, и вы не применили правильный способ создания пути к файлу из пути и имени файла.И я думаю, что вы не должны удалять файлы, которые не имеют оригинала (т.е. которые не являются дубликатами, хотя их имя выглядит так).
Попробуйте это:
for file_name in file_list:
if "(1)" not in file_name:
continue
original_file_name = file_name.replace('(1)', '')
if not os.path.exists(os.path.join(file_path, original_file_name):
continue # do not remove files which have no original
os.remove(os.path.join(file_path, file_name))
Имейте в виду, что этоне работает должным образом для файлов с несколькими вхождениями (1)
, а файлы с (2)
или более высокими номерами также вообще не обрабатываются.Таким образом, мое реальное предложение будет следующим:
- Составьте список всех файлов во всем дереве каталогов ниже заданного начала (используйте
os.walk()
, чтобы получить это), затем - sortвсе файлы по размеру, затем
- проходят по этому списку линейно, идентифицируют двойные числа (которые являются соседями в этом списке), а
- дают каждую такую двойную группу (то есть небольшой список файлов (как правило, только два), которые идентичны).
Конечно, вы должны проверить содержимое этих нескольких файлов, чтобы убедиться, что не только два из них случайно имеют одинаковый размер, не будучи идентичными.Если вы уверены, что у вас есть группа идентичных, удалите все, кроме одного с простейшими именами (например, без суффиксов (1)
и т. Д.).
Кстати, я бы назвал file_path
что-то вроде dir_path
или root_dir_path
(потому что это каталог и полный путь к нему).