filecmp
— Сравнение файлов и каталогов¶
Источник: Lib/filecmp.py
Модуль filecmp
определяет функции для сравнения файлов и каталогов, с различными опциональными компромиссами между временем и корректностью. Для сравнения файлов см. также модуль difflib
.
Модуль filecmp
определяет следующие функции:
- filecmp.cmp(f1, f2, shallow=True)¶
Сравните файлы с именами f1 и f2, вернув
True
, если они равны, иFalse
в противном случае.Если значение shallow равно true и сигнатуры
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. Это может быть полезно, если файл сравнивается так быстро после его модификации, что это находится в пределах разрешения mtime базовой файловой системы.
Added in version 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¶
Added in version 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)