Поиск дубликатов файлов с использованием Python - PullRequest
1 голос
/ 01 марта 2012

Это был вопрос, который появился в конкурсе по программированию на Python, и ему было интересно, как этого достичь.

Постановка задачи:

У вас есть два каталога (с возможными подкаталогами в нем).Ваш сценарий должен обнаружить дубликаты файлов, сравнивая содержимое одинаковых имен файлов в двух корневых каталогах

Результат: FAIL: если содержимое хотя бы одного и того же имени файла отличается

PASS: В противном случае

Вот пример рисунка

 /dir1                       /dir2
       -- file1                   -- file1 
       -- file2                   -- fileA  
       -- file3                   -- fileB   
       -- ....
       -- ...
       ---/subDir1
            --file1
            --file2

file1 of dir1 contains :- foo bar
file1  of dir2 contains :- foo 
Result - Fail

file1  of dir1 contains :- foo bar
file1  of dir2 contains :- foo bar
Result - Pass.

Я пытался использовать хеширование по размеру файла, но это явно было не так:)

PS: любой язык сценариев можетбыть использованы.

Спасибо Келли

Ответы [ 2 ]

3 голосов
/ 01 марта 2012

Вы можете решить эту проблему многоуровневым способом.

  1. Пройдите по каждому каталогу / поддиректору, сравните размер файлов.
  2. Если размер файла отличается => сбой
  3. Вычислить хеш SHA1 для каждого файла, если он не совпадает => сбой
  4. Если хеш-значения SHA1 совпадают, выполните байтовое сравнение содержимого файла, чтобы быть абсолютно уверенным.
1 голос
/ 01 марта 2012

Посмотрите на модуль filecmp в стандартной библиотеке.

Вычисление хэшей бесполезно, когда каждый файл сравнивается только с одним другим файлом.Весь файл должен быть прочитан, чтобы вычислить хеш, и прочитан снова, чтобы подтвердить совпадение.Напротив, прямое сравнение может быть прервано при первой разнице.

...