Python SequenceMatcher 开销 - 100% 的 CPU 使用率和非常缓慢的处理

标签 python difflib

我正在使用 difflib 比较两个目录中的文件(连续年份的版本)。 首先,我使用 filecmp 查找已更改的文件,然后迭代使用 difflib.SequenceMatcher 比较它们并生成 html 差异,如 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,您将能够看到树的任意两个修订版之间发生了什么变化。要么只是二进制文件发生了变化,要么是文本文件的差异。

关于Python SequenceMatcher 开销 - 100% 的 CPU 使用率和非常缓慢的处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1870646/

相关文章:

python - 使用映射字典更改字典的键

python - python中的序列匹配算法

python - Django 窗口函数

Python 字符串对象引用

Python:未正确调用 DataFrame 构造函数

python - tensorflow 损失已经很低

Python difflib.Differ 与上下文差异

python - 自动更正python列表中的单词

Python,使用difflib逐字比较两个句子