我正在使用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。

10-05 23:42