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(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'будут находиться каждый в одном из трёх возвращаемых списков.
-
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).
-
-
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–2025 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/filecmp.html