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)