GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - gusenov/diff-dir-py: Скрипт на Питоне для рекурсивного сравнения содержимого двух папок.

BranchesTags
Open more actions menu

Latest commit

 

History

8 Commits
8 Commits

Folders and files

NameName
Last commit message
Last commit date
.idea
.idea
 
 
diffdir
diffdir
 
 
tests/line-endings
tests/line-endings
 
 
.gitignore
.gitignore
 
 
LICENSE
LICENSE
 
 
MANIFEST
MANIFEST
 
 
README.md
README.md
 
 
publish.sh
publish.sh
 
 
setup.cfg
setup.cfg
 
 
setup.py
setup.py
 
 

Repository files navigation

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

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

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

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

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

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

  • tutorialspoint.com/python/python_command_line_arguments.htm
  • tutorialspoint.com/python/os_walk.htm
  • pyformat.info/#simple

Юникод:

  • stackoverflow.com/questions/10589620/syntaxerror-non-ascii-character-xa3-in-file-when-function-returns-£

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

  • stackoverflow.com/questions/12330522/reading-a-file-without-newlines
  • stackoverflow.com/questions/3860519/see-line-breaks-and-carriage-returns-in-editor

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

  • stackoverflow.com/questions/761519/is-it-ok-to-use-dashes-in-python-files-when-trying-to-import-them
  • stackoverflow.com/questions/8350853/how-to-import-module-when-module-name-has-a-dash-or-hyphen-in-it
  • stackoverflow.com/questions/8790003/dynamically-import-a-method-in-a-file-from-a-string
  • ru.stackoverflow.com/questions/420987/Обращение-к-функции-заданной-в-init-py
  • ibm.com/developerworks/ru/library/l-python_part_5/index.html
  • pep8.ru/doc/tutorial-3.1/6.html
  • stackoverflow.com/questions/36515197/python-import-module-from-a-package

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

  • peterdowns.com/posts/first-time-with-pypi.html
  • docs.python.org/3.7/distutils/packageindex.html
  • packaging.python.org/tutorials/distributing-packages
  • pypi.python.org/pypi?:action=list_classifiers
  • packaging.python.org/guides/using-testpypi

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

  • stackoverflow.com/questions/34514703/pip-install-from-pypi-works-but-from-testpypi-fails-cannot-find-requirements
  • pip.pypa.io/en/stable/reference/pip_uninstall

About

Скрипт на Питоне для рекурсивного сравнения содержимого двух папок.

pypi.python.org/pypi/diff-dir-py

Topics

compare-datacompare-filespypipythonpython-packagepython-scripttestpypi

Resources

Readme
MIT license
Activity

Stars

1 star

Watchers

0 watching

Forks

0 forks
Report repository

Releases

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.