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

Мне нужен способ сравнить два файла с одним и тем же именем хоста. Я написал функцию, которая будет анализировать имена хостов и сохранять их в списке. Как только у меня есть, мне нужно иметь возможность сравнивать файлы.

Каждый файл находится в другом каталоге.

Шаг 1. Извлеките «имя хоста» из каждого файла. Шаг второй: выполните сравнение файлов с одним и тем же «именем хоста» из двух каталогов.

Получить имя хоста Код:

def hostname_parse(directory): results = [] try: for filename in os.listdir(directory): if filename.endswith(('.cfg', '.startup', '.confg')): file_name = os.path.join(directory, filename) with open(file_name, "r") as in_file: for line in in_file: match = re.search('hostname\s(\S+)', line) if match: results.append(match.group(1)) #print "Match Found" return results except IOError as (errno, strerror): print "I/O error({0}): {1}".format(errno, strerror) print "Error in hostname_parse function" 

Пример данных:

Тестовый файл:

 19-30# ! version 12.3 service timestamps debug datetime msec service timestamps log datetime msec service password-encryption ! hostname 19-30 ! boot-start-marker boot-end-marker ! ntp clock-period 17179738 ntp source Loopback0 ! end 19-30# 

В этом случае имя хоста составляет 19-30. Для простоты тестирования я просто использовал один и тот же файл, но изменил его так же или не тот же.

Как указано выше. Я могу извлечь имя хоста, но теперь я ищу способ сравнить файлы на основе найденного имени хоста.

В основе вещей – сравнение файлов. Однако быть в состоянии взглянуть на конкретные поля будет то, что я хотел бы выполнить. Для начала я просто смотрю, что файлы идентичны. Чувствительность к регистру не имеет значения, так как это созданные cisco файлы, которые имеют одинаковое форматирование. Содержимое файлов более важно, так как я ищу «изменения конфигурации».

Вот несколько кодов для удовлетворения ваших требований. У меня не было возможности проверить, так что у него может быть несколько проблем. Используется hash lib для вычисления хэша в содержимом файла, как способ поиска изменений.

 import hashlib import os import re HOSTNAME_RE = re.compile(r'hostname +(\S+)') def get_file_info_from_lines(filename, file_lines): hostname = None a_hash = hashlib.sha1() for line in file_lines: a_hash.update(line.encode('utf-8')) match = HOSTNAME_RE.match(line) if match: hostname = match.group(1) return hostname, filename, a_hash.hexdigest() def get_file_info(filename): if filename.endswith(('.cfg', '.startup', '.confg')): with open(filename, "r") as in_file: return get_file_info_from_lines(filename, in_file.readlines()) def hostname_parse(directory): results = {} for filename in os.listdir(directory): info = get_file_info(filename) if info is not None: results[info[0]] = info return results results1 = hostname_parse('dir1') results2 = hostname_parse('dir2') for hostname, filename, filehash in results1.values(): if hostname in results2: _, filename2, filehash2 = results2[hostname] if filehash != filehash2: print("%s has a change (%s, %s)" % ( hostname, filehash, filehash2)) print(filename) print(filename2) print()