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

10.4. filecmp – Сравнение файлов и каталоговfilecmp – File and Directory Comparisons

Модуль filecmp определяет функции для сравнения файлов и каталогов, с различными опциональными компромиссами по времени/точности. Для сравнения файлов см. также модуль difflib.

Модуль filecmp определяет следующие функции:

filecmp.cmp(f1, f2, shallow=True)

Сравнивает файлы с именами f1 и f2, возвращая True, если они кажутся равными, иначе False.

Если shallow не задан или равен False, файлы с одинаковыми сигнатурами os.stat() считаются равными.

Файлы, уже сравнённые с помощью этой функции, не будут сравниваться повторно, пока не изменится их сигнатура os.stat().

Обратите внимание, что эта функция не вызывает внешние программы, что обеспечивает её переносимость и эффективность.

filecmp.cmpfiles(dir1, dir2, common, shallow=True)

Сравнивает файлы в двух каталогах dir1 и dir2, чьи имена указаны в common.

Возвращает три списка имён файлов: match, mismatch, errors. match содержит список совпадающих файлов, mismatch содержит имена тех, которые не совпадают, а errors перечисляет имена файлов, которые не удалось сравнить. Файлы попадают в errors, если они отсутствуют в одном из каталогов, у пользователя нет прав на их чтение или сравнение не удалось выполнить по другой причине.

Параметр shallow имеет тот же смысл и значение по умолчанию, что и для filecmp.cmp().

Например, cmpfiles('a', 'b', ['c', 'd/e']) сравнит a/c с b/c и a/d/e с b/d/e. 'c' и 'd/e' будут в одном из трёх возвращаемых списков.

Пример:

>>> import filecmp
>>> filecmp.cmp('undoc.rst', 'undoc.rst')
True
>>> filecmp.cmp('undoc.rst', 'index.rst')
False

10.4.1. Класс dircmpThe dircmp class

Экземпляры dircmp создаются с помощью этого конструктора:

class filecmp.dircmp(a, b, ignore=None, hide=None)

Создаёт новый объект сравнения каталогов для сравнения каталогов a и b. ignore – это список имён для игнорирования; по умолчанию равен ['RCS', 'CVS', 'tags']. hide – это список имён для скрытия; по умолчанию равен [os.curdir, os.pardir].

Класс dircmp предоставляет следующие методы:

report()
Выводит (в sys.stdout) результат сравнения между a и b.
report_partial_closure()
Выводит результат сравнения между a и b и общими непосредственными подкаталогами.
report_full_closure()
Выводит результат сравнения между a и b и общими подкаталогами (рекурсивно).

dircmp предоставляет ряд интересных атрибутов, которые можно использовать для получения различной информации о сравниваемых деревьях каталогов.

Обратите внимание, что через перехватчики __getattr__() все атрибуты вычисляются лениво, поэтому нет потери производительности, если используются только те атрибуты, которые легко вычислить.

left_list
Файлы и подкаталоги в a, отфильтрованные по hide и ignore.
right_list
Файлы и подкаталоги в b, отфильтрованные по hide и ignore.
common
Файлы и подкаталоги, присутствующие в обоих a и b.
left_only
Файлы и подкаталоги только в a.
right_only
Файлы и подкаталоги только в b.
common_dirs
Подкаталоги, присутствующие в обоих a и b.
common_files
Файлы, присутствующие в обоих a и b
common_funny
Имена, присутствующие как в a, так и в b, для которых тип различается между dиректориями, или имена, для которых os.stat() сообщает об ошибке.
same_files
Файлы, совпадающие в обоих каталогах a и b.
diff_files
Файлы, присутствующие в обоих каталогах a и b, содержимое которых различается.
funny_files
Файлы, присутствующие в обоих a и b, но которые не удалось сравнить.
subdirs
Словарь, сопоставляющий имена из common_dirs объектам dircmp .