使用方式 python fileDiff.py -s , -iq 'a|b&c-d^e' 参数 -s 指定换行字符 -i 忽略指定字符,后面跟一个字符 -iq 忽略单引号,双引号,后面没有参数 操作符 【|】: 取交集 【&】: 取并集 【-】: 相当于removeAll 【^】: 并集减去交集
#!/usr/bin/env python ################################################## # # # desc: find out diff record between to file # # author: fangqiang # # date: 2014-01-02 # # # ################################################## from argparse import ArgumentParser import re,sys SPLITER = False IGNORE_QUOT = False IGNORE = False def formatLine(line): if IGNORE: for x in IGNORE: line = line.replace(x, "") if IGNORE_QUOT: line = line.replace("'","") line = line.replace('"',"") if SPLITER: return set(l.strip() for l in line.split(SPLITER) if len(l.strip()) != 0) return set([line]) """ file to set """ def f(file): res = set() lines = open(file).readlines() for line in lines: if len(line.strip()) != 0: res = res | formatLine(line.strip()) return res if __name__ == "__main__": p = ArgumentParser(usage='find different line between two file', description='fill diff') p.add_argument('-s') p.add_argument('-iq', action='append_const', const='') p.add_argument('-i') p.add_argument('eval') args = p.parse_args() if args.s: SPLITER = args.s if args.iq: IGNORE_QUOT = True if args.i: IGNORE = set(l.strip() for l in args.i.split(",") if len(l.strip()) != 0) evalString = args.eval varSet = set(re.split(r'[\(\)\|\&\-\^]+', evalString)) for var in varSet: if len(var.strip()) > 0: evalString = evalString.replace(var.strip(), "f('"+ var.strip() +"')") """ f1 | f2 -> f('f1') | file('f2') """ res = eval(evalString) for line in sorted(res): print line