Рекурсивное сравнение папок с использованием python - PullRequest
2 голосов
/ 04 октября 2010

Я собираюсь реализовать рекурсивное сравнение папок на python. Какой, по вашему мнению, лучший алгоритм для этого?

  1. Получить два списка файлов для папок
  2. Сортировка обоих списков
  3. Сравнить, используя модуль filecmp для файла
  4. Повторить для каждой папки рекурсивно

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

Спасибо.

Ответы [ 2 ]

2 голосов
/ 04 октября 2010

Выполнить рекурсивный поиск по каталогу и для каждого хранилища файлов md5 или sha контрольной суммы файла в словаре в качестве ключа и пути / имени в качестве значения. Сделайте этот словарь для обоих каталогов. Затем вы можете удалить пары из каждого каталога и в результате отсутствуют / разные файлы.

Это сделает простой O (n) алгоритм, где n - это объем каталога.

1 голос
/ 04 октября 2010

Если бы я был вами, я бы проверил, если другое программное обеспечение не реализует эту функцию, например rsync или diff.Для того, что я вижу, оба имеют функции, которые вам нужны.Подробнее об этом здесь .

Если вам действительно нужно сделать это в Python, я бы немного изменил ваш алгоритм, сделав его так:

  1. Сохраните содержимое обоих путей в двух отдельных переменных списка, используя os.walk ;
  2. Выполните итерацию по каждому значению первого списка, чтобы найти соответствующее значение во втором списке;
  3. Если соответствующее значение было найдено, сравните его с помощью модуля filecmp.В противном случае отобразите отсутствующий файл;
  4. Удалите значение из второго списка;
  5. Переходите к # 2, пока первый список не станет пустым;
  6. Распечатайте все, что осталось во втором спискесписок;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...