python实现文本差异比较

'''

text1:文本1

text2:文本2

text2_differ_list:文本2中存在差异的地方

text1_differ_list:文本1中存在差异的地方

flag:e(相同点)/n(差异点)

value:相同或者不同的内容

'''

def get_txts_compare_differ(text1, text2):
    str1 = text1
    str2 = text2
    matcher = difflib.SequenceMatcher(None, str1, str2)
    # print(matcher)
    text1_differ_list = []
    text2_differ_list = []
    for op, i1, i2, j1, j2 in matcher.get_opcodes():
        text1_differ_dict = {}
        text2_differ_dict = {}

        if op == 'insert':
            # print("Insert:", str2[j1:j2])
            text2_differ_dict['flag'] = 'n'
            text2_differ_dict['value'] = str2[j1:j2]
            text2_differ_list.append(text2_differ_dict)
        elif op == 'delete':
            # print("Delete:", str1[i1:i2])
            text1_differ_dict['flag'] = 'n'
            text1_differ_dict['value'] = str1[i1:i2]
            text1_differ_list.append(text1_differ_dict)
        elif op == 'replace':
            # print("Replace:", str1[i1:i2], "with", str2[j1:j2])
            text1_differ_dict['flag'] = 'n'
            text1_differ_dict['value'] = str1[i1:i2]
            text1_differ_list.append(text1_differ_dict)
            text2_differ_dict['flag'] = 'n'
            text2_differ_dict['value'] = str2[j1:j2]
            text2_differ_list.append(text2_differ_dict)
        elif op == 'equal':
            # print("Equal:", str1[i1:i2])
            text1_differ_dict['flag'] = 'e'
            text1_differ_dict['value'] = str1[i1:i2]
            text1_differ_list.append(text1_differ_dict)
            text2_differ_dict['flag'] = 'e'
            text2_differ_dict['value'] = str2[j1:j2]
            text2_differ_list.append(text2_differ_dict)
    # print('text1_differ_list==', text1_differ_list)
    # print('text2_differ_list==', text2_differ_list)
    return text1_differ_list, text2_differ_list

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值