gusenov / diff-dir-py

Скрипт на Питоне для рекурсивного сравнения содержимого двух папок.
https://pypi.python.org/pypi/diff-dir-py
MIT License
1 stars 0 forks source link
compare-data compare-files pypi python python-package python-script testpypi

Общие сведения

diff-dir.py - это скрипт на Питоне для рекурсивного сравнения содержимого двух папок.

Скрипт рекурсивно поимённо сравнивает файлы из копии с файлами из оригинала. Сравнение на идентичность проводится путем расчёта и сверки MD5-хешей от файлов. Также можно включить построчное сравнение файлов.

Входные данные

Скрипт принимает на входе пути к двум папкам: оригиналу и копии.

Путь к оригиналу указывается через длинную опцию --odir (в коротком варианте -o).

Путь к копии указывается через длинную опцию --cdir (в коротком варианте ).

Выходные данные

В вывод всегда попадают:

В вывод никогда не попадают:

Формат вывода:

* относительный/путь/к/файлу
- относительный/путь/к/файлу

Обозначения:

Переводы строк

В некоторых случаях файлы являются идентичными за исключением способа перевода строки. Если сравнивать такие файлы через их MD5-хеши, то они будут считаться различными.

$ python diff-dir.py --odir tests/line-endings/lf/ --cdir tests/line-endings/cr+lf/
* _languages.js

Поэтому у скрипта есть длинная опция --line-by-line (в коротком варианте -l), которая включает дополнительное сравнение файлов по строкам. При использовании этой опции, если у файлов различные MD5-хеши, но при построковом сравнении они равны, то эти файлы будут считаться идентичными.

$ python diff-dir.py -o tests/line-endings/lf/ -c tests/line-endings/cr+lf/ -l

Для того чтобы избежать построчного сравнения бинарных файлов в константе BINARY перечислены расширения для которых не нужно проводить построчное сравнение.

Примеры использования скрипта diff-dir.py в качестве инструмента

  1. Вывод справки по коротким опциям:
$ python diff-dir.py -h
diff-dir.py -o <origindir> -c <clonedir> -l
  1. Вывод справки по длинным опциям:
$ python diff-dir.py --help
diff-dir.py --odir <origindir> --cdir <clonedir> --line-by-line
  1. Использование длинных опций:
$ python diff-dir.py --odir /o/ri/gin/al/ --cdir /c/lo/ne/ --line-by-line
  1. Использование коротких опций:
$ python diff-dir.py -o /or/igi/na/l/ -c /cl/on/e/ -l

Пакет diff-dir-py в Python Package Index

Установка пакета в ~/.local/lib/python3.5/site-packages/:

$ pip install diff-dir-py --user

Использование пакета в своём коде:

Функция diffdir.cmp является генератором кортежей из двух элементов: (путь к файлу, статус по нему).

import diffdir

origin = "/o/ri/gin/al/"
clone = "/c/lo/ne/"

difference = diffdir.cmp(origin, clone, True)

for path, status in difference:
    print("{} {}".format(status, path))

Результат исполнения вышеприведённого кода:

* относительный/путь/к/файлу
- относительный/путь/к/файлу

Удаление пакета:

$ pip uninstall diff-dir-py

Исходный код проекта

Информация, использованная при реализации

Стандартная библиотека:

Юникод:

Переводы строк:

Импорт модулей:

Каталог пакетов Python Package Index:

Система управления пакетами pip: