Сообщить об ошибке.

Функция cmpfiles() модуля filecmp в Python

Сравнить файлы двух каталогов файловой системы

Синтаксис:

import filecmp

filecmp.cmpfiles(dir1, dir2, common, shallow=True)

Параметры:

  • dir1, dir2 - имена директорий с общими файлами,
  • common - список имен сравниваемых файлов,
  • shallow=True - сравнивать содержимое файлов.

Возвращаемое значение:

Описание:

Функция cmpfiles() модуля filecmp сравнивает файлы в двух каталогах dir1 и dir2, список имен которых переданы аргументу common.

Возвращает кортеж из трех списков имен файлов (match, mismatch, errors):

  • список match содержит список файлов, которые совпадают,
  • список mismatch содержит имена тех, которые не совпадают,
  • список errors содержат имена файлов, которые нельзя сравнивать.

Файлы отображаются в списке error если их нет в одном из каталогов, у пользователя нет разрешения на их чтение или если сравнение не может быть выполнено по какой-либо другой причине.

Параметр shallow имеет то же значение и значение по умолчанию, что и для функции filecmp.cmp().

Например вызов filecmp.cmpfiles('a', 'b', ['c', 'd/e']) будет сравнивать a/c с b/c и a/d/e c b/d/e. Файлы 'c' и 'd/e' будут в каждом из трех возвращенных списков.

Примеры:

import filecmp, os

# преобразовываем списки файлов 
# каталогов dir1 и dir2 в множества 
file_dir1 = set(os.listdir('path/to/dir1'))
file_dir1 = set(os.listdir('path/to/dir2'))

# находим пересечение множеств, тем
# самым получаем общие имена
common = list(file_dir1 & file_dir2)

# Теперь проверяем список common
# на файлы, чтобы не попался каталог
common_files = [
    file_name
    for file_name in common
    if os.path.isfile(os.path.join('path/to/dir1', file_name))
]

# Сравниваем общие файлы 2-х каталогов
match, mismatch, errors = filecmp.cmpfiles(
    'path/to/dir1',
    'path/to/dir2',
    common_files,
)

>>> common_files
# ['contents_differ', 'file_in_dir1', 'common_file']
>>> match
# ['common_file']
>>> mismatch
# ['contents_differ', 'file_in_dir1']
>>> errors
# []