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