Spec-Zone.ru › Python 3.9

filecmp — Сравнение файлов и каталогов

Исходный код: 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. Это может быть полезно, если файл сравнивается сразу после изменения, так что он попадает в разрешение по времени последнего изменения на основе файловой системы.

Введено в версии 3.4.

Объекты класса dircmp

class filecmp.dircmp(a, b, ignore=None, hide=None)

Создаёт новый объект сравнения каталогов для сравнения каталогов a и b. ignore — список имён для игнорирования, по умолчанию равен filecmp.DEFAULT_IGNORES. hide — список имён для скрытия, по умолчанию [os.curdir, os.pardir].

Класс dircmp сравнивает файлы путём выполнения сравнений shallow, как описано для 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.

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–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/library/filecmp.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API