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