filecmp
— File and Directory Comparisons¶
Вихідний код: 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 містить імена файлів, які не вдалося порівняти. Файли перераховуються в помилках, якщо вони не існують в одному з каталогів, у користувача немає дозволу на їх читання або якщо порівняння не вдалося виконати з іншої причини.
Параметр 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)¶ Construct a new directory comparison object, to compare the directories a and b. ignore is a list of names to ignore, and defaults to
filecmp.DEFAULT_IGNORES
. hide is a list of names to hide, and defaults to[os.curdir, os.pardir]
.The
dircmp
class compares files by doing shallow comparisons as described forfilecmp.cmp()
.Клас
dircmp
надає такі методи:-
report
()¶ Вивести (у
sys.stdout
) порівняння між a і b.
-
report_partial_closure
()¶ Надрукуйте порівняння між a і b та загальними безпосередніми підкаталогами.
-
report_full_closure
()¶ Вивести порівняння між a і b та загальними підкаталогами (рекурсивно).
Клас
dircmp
пропонує низку цікавих атрибутів, які можна використовувати для отримання різноманітної інформації про порівнювані дерева каталогів.Note that via
__getattr__()
hooks, all attributes are computed lazily, so there is no speed penalty if only those attributes which are lightweight to compute are used.-
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
¶ A dictionary mapping names in
common_dirs
todircmp
objects.
-
Ось спрощений приклад використання атрибута 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)