Spec-Zone.ru › Python 3.14

filecmp — Сравнение файлов и каталогов

Исходный код: Lib/filecmp.py

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

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

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

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

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

В противном случае файлы считаются различными, если различаются их размеры или содержимое.

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

Эта функция использует кэш для предыдущих сравнений и их результатов; записи кэша аннулируются, если информация os.stat() файла изменяется. Весь кэш можно очистить с помощью clear_cache().

filecmp.cmpfiles(a, b, common, shallow=True)

Сравнивает файлы в двух каталогах a и b, имена которых указаны в 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' будут находиться в одном из трёх возвращённых списков.

filecmp.clear_cache()

Очищает кэш filecmp. Это может быть полезно, если файл сравнивается настолько быстро после изменения, что время изменения попадает в пределы разрешения файловой системы.

Добавлено в версии 3.4.

Класс dircmp

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

Создаёт новый объект для сравнения каталогов a и b. ignore — список имён, которые следует игнорировать; по умолчанию используется filecmp.DEFAULT_IGNORES. hide — список имён, которые следует скрыть; по умолчанию используется [os.curdir, os.pardir].

По умолчанию класс dircmp сравнивает файлы, выполняя «поверхностные» сравнения, описанные для filecmp.cmp(), с использованием параметра shallow.

Изменено в версии 3.13: Добавлен параметр shallow.

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

report()

Выводит (в sys.stdout) результаты сравнения a и b.

report_partial_closure()

Выводит результаты сравнения a и b, а также их общих непосредственных подкаталогов.

report_full_closure()

Выводит результаты сравнения a и b, а также их общих подкаталогов (рекурсивно).

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

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

left

Каталог a.

right

Каталог b.

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, для которых типы в каталогах различаются, а также имена, для которых os.stat() сообщает об ошибке.

same_files

Файлы, идентичные в a и b согласно оператору сравнения файлов этого класса.

diff_files

Файлы, присутствующие и в a, и в b, содержимое которых различается согласно оператору сравнения файлов этого класса.

funny_files

Файлы, присутствующие и в a, и в b, которые не удалось сравнить.

subdirs

Словарь, сопоставляющий имена из common_dirs экземплярам dircmp (или экземплярам MyDirCmp, если данный экземпляр имеет тип MyDirCmp — подкласс dircmp).

Изменено в версии 3.10: Ранее элементами всегда были экземпляры dircmp. Теперь элементы имеют тот же тип, что и self, если self является подклассом dircmp.

filecmp.DEFAULT_IGNORES

Добавлено в версии 3.4.

Список каталогов, которые dircmp игнорирует по умолчанию.

Ниже приведён упрощённый пример использования атрибута subdirs для рекурсивного поиска в двух каталогах и вывода общих файлов с различающимся содержимым:

>>> from filecmp import dircmp
>>> def print_diff_files(dcmp):
...     for name in dcmp.diff_files:
...         print("diff_file %s found in %s and %s" % (name, dcmp.left,
...               dcmp.right))
...     for sub_dcmp in dcmp.subdirs.values():
...         print_diff_files(sub_dcmp)
...
>>> dcmp = dircmp('dir1', 'dir2')
>>> print_diff_files(dcmp)

© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/library/filecmp.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API