Copтиpoвка файлов в директории

У меня в директории files есть 1.000 файлов с именами формата 5_example_11f1954c.file, где 11f1954c - контрольная сумма файла. Также имеется файл filter.txt, в котором представлено 1.000 строк с контрольными суммами. Содержание файла filter.txt следующего формата:

b81ea33e
f65672c8
4be78049
d935052d
...

Мне нужно перебрать файлы из директории files следующим образом: если контрольная сумма файла из директории files не совпадает с контрольной суммой из текстового документа filter.txt, то файл нужно удалить, а в директории files по итогу останутся только те файлы, чьи контрольные суммы совпали со строкой из файла filter.txt.

Пример: В директории содержатся файлы с именами:

5_0966f47faa_d935052d.file
5_0b0f283d97_b96724ec.file
5_5cc850a970_096cede7.file
5_02d64df100_6e0d0602.file

Файл new.txt имеет следующее содержание:

d935052d
1e7acfee
096cede7
43c283b4

Сортируем файлы:

  1. Отбрасываем расширение .file с конца и выделяем последние 8 символов файла 5_0a6dac77be_6796620b.file > 5_0a6dac77be_6796620b > 6796620b
  2. Если последние 8 символов файла не содержатся в файле filter.txt, то удаляем файл из директории.

По итогу директория files должна выглядеть так:

5_0966f47faa_d935052d.file
5_5cc850a970_096cede7.file

Помогите, пожалуйста, решить эту задачу! Написал уже кучу циклов и условий, использовал with open, срезы, но ничего не выходит..

import os
for root, dirs, files in os.walk(r"D:\Загрузки\16_8b6df81f"):
    for filename in files:
        filename_name = filename.index('.')
        filename = filename[:filename_name]
        filename = filename[-8:]
        #print(filename)
        with open(r"D:\Загрузки\test\new1.txt") as search:
            for line in search:
                line = line.rstrip()  # remove '\n' at end of line
                if filename == line:
                    print(1)
                    filename = 0


Удаляю файлы, чексумма которых совпала со словарем
import os
for root, dirs, files in os.walk(r"D:\Загрузки\16_8b6df81f"):
    for filename in files:
        filename_name = filename.index('.')
        filename_checksum = filename[:filename_name]
        filename_checksum = filename_checksum[-8:]
        #print(filename)
        with open(r"D:\Загрузки\test\new1.txt") as search:
            for line in search:
                line = line.rstrip()  # remove '\n' at end of line
                if filename_checksum != line:
                    path = os.path.join(os.path.abspath(os.path.dirname(__file__)), filename)
                    os.remove(path)
                    #print(1)
                    filename_checksum = 0

Ответы (0 шт):