我正在使用difflib比较两个目录(连续几年的版本)中的文件。
首先,我使用filecmp查找已更改的文件,然后使用difflib.SequenceMatcher进行迭代以比较它们并生成html diff,如here所述。
但是,我发现该程序运行时间太长,而python正在使用100%CPU。在时间分析中,我发现seqm.get_opcodes()调用一直在花费时间。
任何见识将不胜感激。
谢谢 !
码:
#changed_set contains the files to be compared
for i in changed_set:
oldLines = open(old_dir +"/" + i).read()
newLines = open(new_dir +"/" + i).read()
seqm = difflib.SequenceMatcher(lambda(x): x in string.whitespace, oldLines, newLines)
opcodes = seqm.get_opcodes() #XXX: Lots of time spent in this !
produceDiffs(seqm, opcodes)
del seqm
最佳答案
我的答案是完全解决该问题的另一种方法:尝试使用git之类的版本控制系统来研究多年来目录的变化。
从第一个目录中创建一个存储库,然后将内容替换为下一年的目录,并进行更改。 (或将.git目录移至下一年的目录,以保存复制/删除操作)。重复。
然后运行gitk,您将能够看到树的任何两个修订之间的变化。要么只是更改了二进制文件,要么对文本文件添加了diff。