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. Это может быть полезно, если файл сравнивается сразу после его изменения, так что время последнего изменения находится в пределах разрешения времени последнего изменения базовой файловой системы.
Добавлена в версии 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–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.13/library/filecmp.html