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.
Возвращает три списка имен файлов: совпадение, несовпадение, ошибки. совпадение содержит список файлов, которые совпадают, несоответствие содержит имена файлов, которые не совпадают, и ошибки перечисляет имена файлов, которые не удалось сравнить. Файлы отображаются в списке ошибки, если они не существуют в одном из каталогов, у пользователя нет разрешения на их чтение или если сравнение не удалось выполнить по какой-либо другой причине.
Параметр 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. игнорировать - это список имен, которые следует игнорировать, и по умолчанию он равен
filecmp.DEFAULT_IGNORES
. скрыть - это список имен, которые нужно скрыть, по умолчанию используется значение[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, отфильтрованные по параметрам скрывать и игнорировать.
- right_list¶
Файлы и подкаталоги в b, отфильтрованные по параметрам скрывать и игнорировать.
- 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)