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 основної файлової системи.
Added in version 3.4.
Клас dircmp
¶
- class filecmp.dircmp(a, b, ignore=None, hide=None, *, shallow=True)¶
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()
by default using the shallow parameter.Змінено в версії 3.13: Added the shallow parameter.
Клас
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¶
Словник, що відображає імена в
common_dirs
на екземпляриdircmp
(або екземпляри MyDirCmp, якщо цей екземпляр має тип MyDirCmp, підклас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)