Содержание страницы
filecmp – Сравнение файлов и каталогов¶filecmp – File and Directory Comparisons
Исходный код: 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. Это может быть полезно, если файл сравнивается настолько быстро после изменения, что это происходит в пределах разрешения mtime базовой файловой системы.
Добавлено в версии 3.4.
Класс dircmp¶The dircmp class
- class filecmp.dircmp(a, b, ignore=None, hide=None)¶
Создаёт новый объект сравнения каталогов для сравнения каталогов a и b. ignore – это список имён, которые следует игнорировать; по умолчанию
filecmp.DEFAULT_IGNORES. hide – это список имён, которые следует скрывать; по умолчанию[os.curdir, os.pardir].Класс
dircmpсравнивает файлы, выполняя поверхностное сравнение, как описано дляfilecmp.cmp().Класс
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)