«Это 8-й день моего участия в ноябрьском испытании обновлений, ознакомьтесь с подробностями события:Вызов последнего обновления 2021 г.".
Описание требования
На прошлой неделе мне неожиданно пришло задание экспортировать данные между ХХ и ХХ годами через сайт ХХ.Имя экспортируемого файла соответствует дате.После экспорта я обнаружил,что некоторые файлы имеют одинаковый размер и разные имена файлов.Просто открой файл.прочитав его я обнаружил что содержимое двух файлов с разными именами файлов дублируется.причина пока не ясна.предсказание причина сайта.в итоге было найдено что только около 30% данных не были дублированы. Мне жаль!
Ничего не говорите, первая задача - отфильтровать те файлы, которые не являются дубликатами, или удалить дубликаты файлов. Есть много сотен файлов.По оценкам, вам придется работать сверхурочно, чтобы удалить их, сравнивая их один за другим, а затем внезапно подумать об этом.Python
имеет встроенныйfilecmp
Может показаться, что вы сравниваете файлы, тут особо нечего сказать, просто откройте целиком~
код
Все экспортированные файлы сохраняются в одной папке и в одном формате. Тогда взгляните на официальную документациюfilecmp.cmp()
использование. Примерное резюме выглядит следующим образом:
filecmp.cmp(f1, f2, shallow=True)
f1/f2
: два пути к файлам для сравнения.shallow
: по умолчаниюTrue
, то есть сравнивать толькоos.stat()
Совпадают ли полученные метаданные (время создания, размер и т. д.), установите значениеFalse
Если это так, сравните содержимое файла при сравнении файлов.
Чтобы код не вызывал проблем, я сначала создалtest
Папка, созданная вручную 6 файлов в папке, 1~5 имеют только цифровой контент, соответствующий 1, 2, 3, 4, 5, а шестой файл является пустым.Затем сделайте копию всего файла. следующее
тестовый код
from pathlib import Path
import filecmp
path_list = [path for path in Path(r'C:\Users\pc\Desktop\test').iterdir() if path.is_file()]
for front in range(len(path_list) - 1):
for later in range(front + 1, len(path_list)):
if filecmp.cmp(path_list[front], path_list[later], shallow=False):
path_list[front].unlink() # 删除文件
break
текущий результат
Общая логика кода очень проста, сначала получите «все файлы» под соответствующим файлом, где «все файлы» относятся кtest
Путь к файлу первого уровня в каталоге, еслиtest
Если в папке есть подпапки, то путь к файлу в подпапке не будет получен, а поскольку указанныйpath.is_file()
,такpath_list
получить только путь к файлу (txt, xlsx, csv, zip и т.д.). Затем сравните, совпадает ли содержимое файла двух текущих путей через двухслойный цикл, и если они совпадают, удалите файл.
Хотя количество кода невелико, это действительно может сократить время ручной обработки, хорошо, заканчивайте цветок~
Это то, чем я хочу поделиться сегодня, поиск WeChatНовые горизонты Python, приносить вам больше полезных знаний каждый день.