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