A simple file comparison utility written in Python.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
# audit-tool.py 2.0 - A simple file comparison utility. | |
# Copyright 2014 13Cubed. All rights reserved. Written by: Richard Davis | |
import sys | |
def compareFiles(filename1, filename2, ignorecase, bidirectional): | |
""" | |
Given two filenames and an ignorecase booelean, compares filename1 | |
against filename2 and returns list of the differences and a count of | |
how many were found. If ignorecase is 1, the contents of both files | |
are read in as lowercase so that case differences are ignored. If | |
bidirectional is 1, filename1 is compared to filename2 and vice-versa. | |
""" | |
results = [] | |
try: | |
f1 = open(filename1, 'rU') | |
except IOError: | |
print 'Could not find the specified file:', filename1 | |
sys.exit(1) | |
try: | |
f2 = open(filename2, 'rU') | |
except IOError: | |
print 'Could not find the specified file:', filename2 | |
sys.exit(1) | |
list1 = f1.readlines() | |
list2 = f2.readlines() | |
f2.close() | |
f1.close() | |
if ignorecase == 1: | |
for i in range(0,len(list1)): | |
list1[i] = list1[i].lower() | |
for i in range(0,len(list2)): | |
list2[i] = list2[i].lower() | |
diffs = set(list1) - set(list2) | |
if bidirectional == 1: | |
reverseDiffs = set(list2) - set(list1) | |
diffcount = 0 | |
results.append('\n' + filename1 + ' -> ' + filename2 + ':\n') | |
for diff in diffs: | |
results.append(diff) | |
diffcount = diffcount + 1 | |
if bidirectional == 1: | |
results.append('\n' + filename1 + ' <- ' + filename2 + ':\n') | |
for diff in reverseDiffs: | |
results.append(diff) | |
diffcount = diffcount + 1 | |
return results, diffcount | |
def main(): | |
if (len(sys.argv) < 3) or (len(sys.argv) > 5): | |
print 'usage: audit-tool.py filename1 filename2 [--ignorecase] [--bidirectional]' | |
sys.exit(1) | |
ignorecase = 0 | |
bidirectional = 0 | |
filename1 = sys.argv[1] | |
filename2 = sys.argv[2] | |
if len(sys.argv) == 4: | |
option1 = sys.argv[3] | |
if option1 == '--ignorecase': | |
ignorecase = 1 | |
elif option1 == '--bidirectional': | |
bidirectional = 1 | |
else: | |
print 'unknown option: ' + option1 | |
sys.exit(1) | |
elif len(sys.argv) == 5: | |
option1 = sys.argv[3] | |
option2 = sys.argv[4] | |
if option1 == '--ignorecase': | |
ignorecase = 1 | |
elif option1 == '--bidirectional': | |
bidirectional = 1 | |
else: | |
print 'unknown option: ' + option1 | |
sys.exit(1) | |
if option2 == '--ignorecase': | |
ignorecase = 1 | |
elif option2 == '--bidirectional': | |
bidirectional = 1 | |
else: | |
print 'unknown option: ' + option2 | |
sys.exit(1) | |
(results, diffcount) = compareFiles(filename1, filename2, ignorecase, bidirectional) | |
if diffcount: | |
print '\n%d difference(s) found.' % (diffcount) | |
for line in results: | |
print line, | |
else: | |
print '\nNo differences -- files are identical.' | |
print '\nCopyright (C) 2014 13Cubed. All rights reserved.' | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment