在银行日常工作中经常会碰到非标准格式的贷款合同、非标保函等等法律性文档,这些文档需要提交法务部门审核后才能使用。对比两个文档异同的这种小工作,如果人工来做是比较耗时耗力的,但使用点小代码就能省不少力,还不会出错。反正不管什么单位,要对比文档就交给python来做:
difflib 模块
>>> import difflib
>>> [_ for _ in dir(difflib) if _[0]<'Z' or _[0]>'a']
['Differ', 'HtmlDiff', 'IS_CHARACTER_JUNK', 'IS_LINE_JUNK',
'Match', 'SequenceMatcher', 'context_diff', 'diff_bytes',
'get_close_matches', 'ndiff', 'restore', 'unified_diff']
>>>
docx 模块
>>> import docx
>>> [_ for _ in dir(docx) if _[0]<'Z' or _[0]>'a']
['Document', 'ImagePart', 'RT', 'blkcntnr', 'compat', 'dml',
'document', 'enum', 'exceptions', 'image', 'opc', 'oxml',
'package', 'parts', 'section', 'settings', 'shape',
'shared', 'styles', 'text']
>>>
部分函数的使用简介如下:
文本对比 difflib.Differ
>>> text1 = '''Python 斐波那契数列递归的改进,算第1000万项只要4秒钟!
https://blog.csdn.net/boysoft2002/article/details/120257133
Python 不自己试试,还真猜不出递归函数的时间复杂度!
https://blog.csdn.net/boysoft2002/article/details/120242318
'''
>>> text2 = '''PYTHON 斐波那契数列递归的改进,算第1000万项只要4秒钟!
https://blog.CSDN.net/boysoft2002/article/details/120257133
Python 真猜不出递归函数的时间复杂度!
https://blog.csdn.net/boysoft2002/article/details/120242318///
'''
>>> a = text1.splitlines(keepends=True)
>>> b = text2.splitlines(keepends=True)
>>> c = difflib.Differ()
>>> print(''.join(list(c.compare(a,b))))
- Python 斐波那契数列递归的改进,算第1000万项只要4秒钟!
? ^^^^^
+ PYTHON 斐波那契数列递归的改进,算第1000万项只要4秒钟!
? ^^^^^
- https://blog.csdn.net/boysoft2002/article/details/120257133
? ^^^^
+ https://blog.CSDN.net/boysoft2002/article/details/120257133
? ^^^^
- Python 不自己试试,还真猜不出递归函数的时间复杂度!
? -------
+ Python 真猜不出递归函数的时间复杂度!
- https://blog.csdn.net/boysoft2002/article/details/120242318
+ https://blog.csdn.net/boysoft2002/article/details/120242318///
? +++
>>>
符号含义说明
“-” 包含在第一个序列行中,但不包含在第二个序列行中
“+” 包含在第二个序列行中,但不包含在第一个序列行中
" " 两个序列行一致
“?” 标志两个序列行存在增量差异
“^” 标志出两个序列行存在的差异字符
超文本对比报告 difflib.HtmlDiff
>>> text1 = '''Python 斐波那契数列递归的改进,算第1000万项只要4秒钟!
https://blog.csdn.net/boysoft2002/article/details/120257133
Python 不自己试试,还真猜不出递归函数的时间复杂度!
https://blog.csdn.net/boysoft2002/article/details/120242318
'''
>>> text2 = '''PYTHON 斐波那契数列递归的改进,算第1000万项只要4秒钟!
https://blog.CSDN.net/boysoft2002/article/details/120257133
Python 真猜不出递归函数的时间复杂度!
https://blog.csdn.net/boysoft2002/article/details/120242318///
'''
>>> a = text1.splitlines(keepends=True)
>>> b = text2.splitlines(keepends=True)
>>> d = difflib.HtmlDiff()
>>> html = d.make_file(a,b)
>>> with open('difReport.html','w',encoding='utf-8') as f: f.write(html)
3223
>>> import os; os.startfile('difReport.html')
>>>
打开的html文件效果:
文档对比相似度 difflib.SequenceMatcher
>>> a = '''Python 斐波那契数列递归的改进,算第1000万项只要4秒钟!
https://blog.csdn.net/boysoft2002/article/details/120257133
Python 不自己试试,还真猜不出递归函数的时间复杂度!
https://blog.csdn.net/boysoft2002/article/details/120242318
'''
>>> b = '''PYTHON 斐波那契数列递归的改进,算第1000万项只要4秒钟!
https://blog.CSDN.net/boysoft2002/article/details/120257133
Python 真猜不出递归函数的时间复杂度!
https://blog.csdn.net/boysoft2002/article/details/120242318///
'''
>>> import difflib
>>> difflib.SequenceMatcher(None,a,b).ratio()*100
92.3076923076923
>>>
Word文档转文本 docx.Document
def doc2txt(docxFile):
x,doc='',docx.Document(docxFile)
try:
for i in doc.paragraphs:x+=i.text
return x.replace('\t','').replace(' ','')
except:
return ''
综合以上知识,就能做做小应用可以给日常的工作提高不少效率。运行效果,代码略:
-- All done!