如何在difflib.ndiff中提取两个字符串的独有差异项?
提取difflib文本对比中两个字符串的独有差异项
你的需求很明确——用difflib对比两个字符串后,分别拿到第一个字符串相对于第二个的独有内容,以及第二个相对于第一个的独有内容。其实你的初始代码已经走对了方向,只需要在ndiff的结果基础上做个简单的分类筛选就行。
完整实现代码
我们可以遍历ndiff返回的每一行,根据行首的标记(-对应第一个文本独有,+对应第二个文本独有)来收集对应的内容:
import difflib one = "If rents are received later than five (5)" two = "If rents are received later than eight (8)" # 把空格替换成换行,按单词拆分对比 n_one = one.replace(" ", "\n") n_two = two.replace(" ", "\n") # 生成差异对比结果 diff = difflib.ndiff(n_one.splitlines(1), n_two.splitlines(1)) # 初始化两个列表存放独有项 only_in_one = [] only_in_two = [] # 遍历每一行差异结果,分类收集 for line in diff: # 行首是'-',说明是第一个文本独有的内容 if line.startswith('- '): # 去掉前缀和末尾的换行符,添加到列表 only_in_one.append(line[2:].strip()) # 行首是'+',说明是第二个文本独有的内容 elif line.startswith('+ '): only_in_two.append(line[2:].strip()) print("第一个字符串的差异项:", only_in_one) print("第二个字符串的差异项:", only_in_two)
运行结果
执行这段代码后,会得到你想要的输出:
第一个字符串的差异项: ['five', '(5)'] 第二个字符串的差异项: ['eight', '(8)']
小补充
这里把空格替换成换行再用splitlines拆分,是为了让difflib按单词来对比差异。如果你的文本本身是按行区分内容的,直接用原始文本的splitlines就行,不用做空格替换哦。
内容的提问来源于stack exchange,提问作者okeoke
相关产品推荐
相关产品推荐

