filecmp — Сравнение файлов и каталогов
Исходный код: Lib/filecmp.py
Модуль filecmp определяет функции для сравнения файлов и каталогов с различными вариантами компромисса между временем и точностью. Для сравнения файлов также см. модуль difflib.
Модуль filecmp определяет следующие функции:
-
filecmp.cmp(f1, f2[, shallow]) -
Сравнивает файлы с именами f1 и f2, возвращая
Trueпри видимом равенстве,Falseв противном случае.Если параметр shallow задан и равен false, файлы с одинаковыми
os.stat()признаками считаются равными.Файлы, сравниваемые с помощью этой функции, не будут сравниваться повторно, если их
os.stat()признаки не изменятся.Обратите внимание, что эта функция не вызывает внешние программы, что обеспечивает переносимость и эффективность.
-
filecmp.cmpfiles(dir1, dir2, common[, shallow]) -
Сравнивает файлы в двух каталогах 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'будут каждый в одном из трёх возвращаемых списков.
Пример:
>>> import filecmp
>>> filecmp.cmp('undoc.rst', 'undoc.rst')
True
>>> filecmp.cmp('undoc.rst', 'index.rst')
False
1. Класс dircmp
dircmp экземпляры создаются с помощью этого конструктора:
-
class filecmp.dircmp(a, b[, ignore[, hide]]) -
Создаёт новый объект сравнения каталогов для сравнения каталогов a и b. ignore — список имён для игнорирования, по умолчанию
['RCS', 'CVS', 'tags']. 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.
-
Вот упрощённый пример использования атрибута 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–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/filecmp.html