Документация Python неофициальный перевод

filecmp.md

131 строк · 7.9 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.3/library/filecmp.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 11.4. [`filecmp`](https://python-all.ru/3.3/library/filecmp.html#module-filecmp) – Сравнение файлов и каталогов89**Исходный код:** [Lib/filecmp.py](https://python-all.ru/src/3.3/Lib/filecmp.py)1011---1213Модуль [`filecmp`](https://python-all.ru/3.3/library/filecmp.html#module-filecmp) определяет функции для сравнения файлов и каталогов с различными компромиссами между скоростью и точностью. Для сравнения файлов также смотрите модуль [`difflib`](https://python-all.ru/3.3/library/difflib.html#module-difflib).1415Модуль [`filecmp`](https://python-all.ru/3.3/library/filecmp.html#module-filecmp) определяет следующие функции:1617#### `filecmp.cmp(f1, f2, shallow=True)`1819Сравнивает файлы с именами *f1* и *f2*, возвращая `True`, если они кажутся равными, иначе `False`.2021Если *shallow* истинно, файлы с одинаковыми сигнатурами [`os.stat()`](https://python-all.ru/3.3/library/os.html#os.stat) считаются равными. В противном случае сравнивается содержимое файлов.2223Обратите внимание, что эта функция не вызывает внешние программы, что обеспечивает её переносимость и эффективность.2425#### `filecmp.cmpfiles(dir1, dir2, common, shallow=True)`2627Сравнивает файлы в двух каталогах *dir1* и *dir2*, чьи имена указаны в *common*.2829Возвращает три списка имён файлов: *match*, *mismatch*, *errors*. *match* содержит список совпадающих файлов, *mismatch* содержит имена тех, которые не совпадают, а *errors* перечисляет имена файлов, которые не удалось сравнить. Файлы попадают в *errors*, если они отсутствуют в одном из каталогов, у пользователя нет прав на их чтение или сравнение не удалось выполнить по другой причине.3031Параметр *shallow* имеет тот же смысл и значение по умолчанию, что и для [`filecmp.cmp()`](https://python-all.ru/3.3/library/filecmp.html#filecmp.cmp).3233Например, `cmpfiles('a', 'b', ['c', 'd/e'])` сравнит `a/c` с `b/c` и `a/d/e` с `b/d/e`. `'c'` и `'d/e'` будут в одном из трёх возвращаемых списков.3435## 11.4.1. Класс [`dircmp`](https://python-all.ru/3.3/library/filecmp.html#filecmp.dircmp)3637#### `class filecmp.dircmp(a, b, ignore=None, hide=None)`3839Создаёт новый объект сравнения каталогов для сравнения каталогов *a* и *b*. *ignore* – это список имён для игнорирования; по умолчанию равен `['RCS', 'CVS', 'tags']`. *hide* – это список имён для скрытия; по умолчанию равен `[os.curdir, os.pardir]`.4041Класс [`dircmp`](https://python-all.ru/3.3/library/filecmp.html#filecmp.dircmp) сравнивает файлы, выполняя *shallow* сравнения, как описано для [`filecmp.cmp()`](https://python-all.ru/3.3/library/filecmp.html#filecmp.cmp).4243Класс [`dircmp`](https://python-all.ru/3.3/library/filecmp.html#filecmp.dircmp) предоставляет следующие методы:4445#### `report()`4647Выводит (в [`sys.stdout`](https://python-all.ru/3.3/library/sys.html#sys.stdout)) сравнение между *a* и *b*.4849#### `report_partial_closure()`5051Выводит результат сравнения между *a* и *b* и общими непосредственными подкаталогами.5253#### `report_full_closure()`5455Выводит результат сравнения между *a* и *b* и общими подкаталогами (рекурсивно).5657Класс [`dircmp`](https://python-all.ru/3.3/library/filecmp.html#filecmp.dircmp) предоставляет ряд полезных атрибутов, которые могут быть использованы для получения различной информации о сравниваемых деревьях каталогов.5859Обратите внимание, что через перехватчики [`__getattr__()`](https://python-all.ru/3.3/reference/datamodel.html#object.__getattr__) все атрибуты вычисляются лениво, поэтому нет потери производительности, если используются только те атрибуты, которые легко вычислить.6061#### `left`6263Каталог *a*.6465#### `right`6667Каталог *b*.6869#### `left_list`7071Файлы и подкаталоги в *a*, отфильтрованные по *hide* и *ignore*.7273#### `right_list`7475Файлы и подкаталоги в *b*, отфильтрованные по *hide* и *ignore*.7677#### `common`7879Файлы и подкаталоги, присутствующие в обоих *a* и *b*.8081#### `left_only`8283Файлы и подкаталоги только в *a*.8485#### `right_only`8687Файлы и подкаталоги только в *b*.8889#### `common_dirs`9091Подкаталоги, присутствующие в обоих *a* и *b*.9293#### `common_files`9495Файлы, присутствующие в обоих *a* и *b*9697#### `common_funny`9899Имена, присутствующие как в *a*, так и в *b*, для которых тип различается между dиректориями, или имена, для которых [`os.stat()`](https://python-all.ru/3.3/library/os.html#os.stat) сообщает об ошибке.100101#### `same_files`102103Файлы, которые идентичны в обоих *a* и *b*, с использованием оператора сравнения файлов класса.104105#### `diff_files`106107Файлы, присутствующие в обоих *a* и *b*, содержимое которых различается согласно оператору сравнения файлов класса.108109#### `funny_files`110111Файлы, присутствующие в обоих *a* и *b*, но которые не удалось сравнить.112113#### `subdirs`114115Словарь, сопоставляющий имена из [`common_dirs`](https://python-all.ru/3.3/library/filecmp.html#filecmp.dircmp.common_dirs) объектам [`dircmp`](https://python-all.ru/3.3/library/filecmp.html#filecmp.dircmp) .116117Вот упрощённый пример использования атрибута `subdirs` для рекурсивного поиска по двум директориям, чтобы показать общие и различающиеся файлы:118119```python120>>> from filecmp import dircmp121>>> def print_diff_files(dcmp):122...     for name in dcmp.diff_files:123...         print("diff_file %s found in %s and %s" % (name, dcmp.left,124...               dcmp.right))125...     for sub_dcmp in dcmp.subdirs.values():126...         print_diff_files(sub_dcmp)127...128>>> dcmp = dircmp('dir1', 'dir2') 129>>> print_diff_files(dcmp) 130```131