python比较两个文件的差异

  • Post author:
  • Post category:python


#version 0
import sys

f1 = open(sys.argv[1], "r")
f2 = open(sys.argv[2], "r")

fileOne = f1.readlines()
fileTwo = f2.readlines()

f1.close()
f2.close()

outFile1 = open(sys.argv[3], "w")
outFile2 = open(sys.argv[4], "w")

for i in fileOne:
        if not i in fileTwo:
                outFile1.write(i)

for i in fileTwo:
        if not i in fileOne:
                outFile2.write(i)

outFile1.close()
outFile2.close()

#first time refacotring 
import sys
from operator import attrgetter,itemgetter

#verify inputs
USAGE='''
%s file1 file2 output1 output2
'''% __file__

if len(sys.argv)<5:
        print USAGE
        sys.exit(2)

#open files with try
try:
        f1 = open(sys.argv[1], "r")
        f2 = open(sys.argv[2], "r")
except Exception,e:
        print 'encounter issues %s, while opening in files: %s %s' % (str(e),itemgetter(1)(sys.argv),itemgetter(2)(sys.argv))
        sys.exit(1)

fileOne = f1.readlines()
fileTwo = f2.readlines()

f1.close()
f2.close()

#open files with try
try:
        outFile1 = open(sys.argv[3], "w")
        outFile2 = open(sys.argv[4], "w")
except Exception,e:
        print 'encounter issues %s, while opening out files: %s %s' % (str(e),itemgetter(3)(sys.argv),itemgetter(4)(sys.argv))
        sys.exit(1)

l_minus=lambda x,y:list(set(x)-set(y))

outFile1.write('\n'.join(l_minus(fileOne,fileTwo)))
outFile2.write('\n'.join(l_minus(fileTwo,fileOne)))

outFile1.close()
outFile2.close()

#2nd time refactoring
import sys
from operator import attrgetter,itemgetter

#verify inputs
USAGE='''
%s file1 file2 output1 output2
'''% __file__

if len(sys.argv)<5:
        print USAGE
        sys.exit(2)

#open files with try
with open(itemgetter(1)(sys.argv), "r") as f1, open(itemgetter(2)(sys.argv), "r") as f2:
        fileOne = f1.readlines()
        fileTwo = f2.readlines()

#list subset
l_minus=lambda x,y:list(set(x)-set(y))
#open files with try
with open(itemgetter(3)(sys.argv), "w") as outFile1, open(itemgetter(4)(sys.argv), "w") as outFile2:
        outFile1.write('\n'.join(l_minus(fileOne,fileTwo)))
        outFile2.write('\n'.join(l_minus(fileTwo,fileOne)))



版权声明:本文为foxtosky原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。