filecmp.md
1> **Источник:** https://python-all.ru/3.0/library/filecmp.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# `filecmp` – Сравнение файлов и каталогов89Модуль `filecmp` определяет функции для сравнения файлов и каталогов, с различными опциональными компромиссами по времени/точности. Для сравнения файлов см. также модуль [`difflib`](https://python-all.ru/3.0/library/difflib.html#module-difflib).1011Модуль `filecmp` определяет следующие функции:1213#### `[filecmp.cmp]filecmp.cmp(f1, f2[, shallow])`1415Сравнивает файлы с именами *f1* и *f2*, возвращая `True`, если они кажутся равными, иначе `False`.1617Если *shallow* не задан или равен False, файлы с одинаковыми сигнатурами [`os.stat()`](https://python-all.ru/3.0/library/os.html#os.stat) считаются равными.1819Файлы, уже сравнённые с помощью этой функции, не будут сравниваться повторно, пока не изменится их сигнатура [`os.stat()`](https://python-all.ru/3.0/library/os.html#os.stat).2021Обратите внимание, что эта функция не вызывает внешние программы, что обеспечивает её переносимость и эффективность.2223#### `[filecmp.cmpfiles]filecmp.cmpfiles(dir1, dir2, common[, shallow])`2425Возвращает три списка имён файлов: *match*, *mismatch*, *errors*. *match* содержит список файлов, совпадающих в обоих каталогах, *mismatch* включает имена несовпадающих файлов, а *errros* – имена файлов, которые не удалось сравнить. Файлы могут попасть в *errors*, если у пользователя нет прав на чтение или по многим другим причинам, но всегда из-за того, что сравнение по какой-то причине не удалось выполнить.2627Параметр *common* – это список имён файлов, найденных в обоих каталогах. Параметр *shallow* имеет то же значение и значение по умолчанию, что и для [`filecmp.cmp()`](https://python-all.ru/3.0/library/filecmp.html#filecmp.cmp).2829Пример:3031```python32>>> import filecmp33>>> filecmp.cmp('undoc.rst', 'undoc.rst')34True35>>> filecmp.cmp('undoc.rst', 'index.rst')36False37```3839## [`dircmp`](https://python-all.ru/3.0/library/filecmp.html#filecmp.dircmp) класс4041Экземпляры [`dircmp`](https://python-all.ru/3.0/library/filecmp.html#filecmp.dircmp) создаются с помощью этого конструктора:4243#### `[filecmp.dircmp]class filecmp.dircmp(a, b[, ignore[, hide]])`4445Создаёт новый объект сравнения каталогов для сравнения каталогов *a* и *b*. *ignore* – это список имён для игнорирования; по умолчанию равен `['RCS', 'CVS', 'tags']`. *hide* – это список имён для скрытия; по умолчанию равен `[os.curdir, os.pardir]`.4647Класс [`dircmp`](https://python-all.ru/3.0/library/filecmp.html#filecmp.dircmp) предоставляет следующие методы:4849#### `[filecmp.dircmp.report]report()`5051Выводит (в5253`sys.stdout`5455) результат сравнения между5657*a*5859и6061*b*6263.6465#### `[filecmp.dircmp.report_partial_closure]report_partial_closure()`6667Выводит результат сравнения между6869*a*7071и7273*b*7475и общими непосредственными подкаталогами.7677#### `[filecmp.dircmp.report_full_closure]report_full_closure()`7879Выводит результат сравнения между8081*a*8283и8485*b*8687и общими подкаталогами (рекурсивно).8889[`dircmp`](https://python-all.ru/3.0/library/filecmp.html#filecmp.dircmp) предоставляет ряд интересных атрибутов, которые можно использовать для получения различной информации о сравниваемых деревьях каталогов.9091Обратите внимание, что через перехватчики [`__getattr__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__getattr__) все атрибуты вычисляются лениво, поэтому нет потери производительности, если используются только те атрибуты, которые легко вычислить.9293#### `[filecmp.dircmp.left_list]left_list`9495Файлы и подкаталоги в9697*a*9899, отфильтрованные по100101*hide*102103и104105*ignore*106107.108109#### `[filecmp.dircmp.right_list]right_list`110111Файлы и подкаталоги в112113*b*114115, отфильтрованные по116117*hide*118119и120121*ignore*122123.124125#### `[filecmp.dircmp.common]common`126127Файлы и подкаталоги, присутствующие в обоих128129*a*130131и132133*b*134135.136137#### `[filecmp.dircmp.left_only]left_only`138139Файлы и подкаталоги только в140141*a*142143.144145#### `[filecmp.dircmp.right_only]right_only`146147Файлы и подкаталоги только в148149*b*150151.152153#### `[filecmp.dircmp.common_dirs]common_dirs`154155Подкаталоги, присутствующие в обоих156157*a*158159и160161*b*162163.164165#### `[filecmp.dircmp.common_files]common_files`166167Файлы, присутствующие в обоих168169*a*170171и172173*b*174175#### `[filecmp.dircmp.common_funny]common_funny`176177Имена, присутствующие как в178179*a*180181, так и в182183*b*184185, для которых тип различается между dиректориями, или имена, для которых186187[`os.stat()`](https://python-all.ru/3.0/library/os.html#os.stat)188189сообщает об ошибке.190191#### `[filecmp.dircmp.same_files]same_files`192193Файлы, совпадающие в обоих каталогах194195*a*196197и198199*b*200201.202203#### `[filecmp.dircmp.diff_files]diff_files`204205Файлы, присутствующие в обоих каталогах206207*a*208209и210211*b*212213, содержимое которых различается.214215#### `[filecmp.dircmp.funny_files]funny_files`216217Файлы, присутствующие в обоих218219*a*220221и222223*b*224225, но которые не удалось сравнить.226227#### `[filecmp.dircmp.subdirs]subdirs`228229Словарь, сопоставляющий имена в230231[`common_dirs`](https://python-all.ru/3.0/library/filecmp.html#filecmp.dircmp.common_dirs)232233объектам234235[`dircmp`](https://python-all.ru/3.0/library/filecmp.html#filecmp.dircmp)236237.238