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 используемой файловой системы.
Добавлено в версии 3.4.
Класс dircmp
-
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)
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/library/filecmp.html