filecmp
— File and Directory Comparisons¶
Вихідний код: Lib/filecmp.py
Модуль filecmp
визначає функції для порівняння файлів і каталогів із різними необов’язковими компромісами між часом і правильністю. Для порівняння файлів див. також модуль difflib
.
Модуль filecmp
визначає такі функції:
-
filecmp.
cmp
(f1, f2, shallow=True)¶ Порівняйте файли з іменами f1 і f2, повертаючи
True
, якщо вони здаються однаковими,False
інакше.If shallow is true, files with identical
os.stat()
signatures are taken to be equal. Otherwise, the contents of the files are compared.Зауважте, що жодні зовнішні програми не викликаються з цієї функції, що забезпечує її переносимість та ефективність.
Ця функція використовує кеш для попередніх порівнянь і результатів, при цьому записи кешу стають недійсними, якщо інформація
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)