Skip to content Skip to sidebar Skip to footer

Comparing Files Once I Have Hostname

I need a way to compare two files that have the same hostname in them. I have written a function that will parse out the hostnames and save that in a list. Once I have that I need

Solution 1:

Here is some code to meet your requirements. I had no way to test, so it may have a few challenges. Is used hash lib to calculate a hash on the file contents, as a way to find changes.

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()

Post a Comment for "Comparing Files Once I Have Hostname"