我一直在尝试在python中编写一个程序来读取两个文本文件并打印其文本中的差异。这两个文件类似于行编号,这些编号因插入的一些注释而不同。我有尝试使用difflib模块,但它给了我错误。
import difflib
from difflib import *
temp3=[]
temp4=[]
with open ("seqdetect",'r') as f:
with open ("seqdetect_2",'r') as g:
for item in f:
temp1 =item.split()
temp3.append(temp1)
for items in g:
temp2 =items.split()
temp4.append(temp2)
d = difflib.Differ()
diff = d.compare(temp3, temp4)
print ('\n'.join(diff))
请你提出另一种选择。 问候, Mayank
答案 0 :(得分:4)
好的,我已经尝试过你的代码并找到了问题。
Differ.compare()
方法需要给出两个字符串列表,表示两个文本的行。但是,由于您的item.split()
来电,您的列表temp3
和temp4
是(一个字符长)字符串列表的列表。
我不确定你究竟想要做什么分裂,所以我不确定最好的解决办法是什么。如果您确实希望它告诉您已添加或删除的各个字符,则可以在两个for循环中将append()
的调用替换为extend()
。但坦率地说,这似乎没有用。
分裂的可能性更大。而不是循环遍历文件中的行,只需使用readlines()
将它们全部读入列表,然后让Differ对它们进行操作。
with open("seqdetect") as f, open("seqdetect_2") as g:
flines = f.readlines()
glines = g.readlines()
d = difflib.Differ()
diff = d.compare(flines, glines)
print("\n".join(diff))
如果你想对一些重要的东西进行过滤(忽略空白差异或其他),你应该探索difflib documentation,并传递一个适当的函数作为linejunk
或{{1 Differ的构造函数的参数。