如何使用difflib在Python3中比较2个具有行号的脚本

时间:2018-07-17 19:09:31

标签: python-3.x difflib

经过大量荒谬的Google搜索并使用了该网站,此脚本是我到目前为止所拥有的。

from difflib import Differ
import sys

filename1 = open("C:/Users/James/Documents/New_folder/script_orginal.js",'r')
filename2 = open("C:/Users/James/Documents/New_folder/script_debugged.js",'r')
differ = Differ()
line_formatter = '{:3d}  {}'.format
file1_lines = [line_formatter(i, line) for i, line in enumerate(filename1.readlines(), 1)]
file2_lines = [line_formatter(i, line) for i, line in enumerate(filename2.readlines(), 1)]
results = differ.compare(file1_lines, file2_lines)
for line in results:
    if line.startswith('-') != line.startswith('+'):
        sys.stdout.write(line)

这确实比较了两个脚本。但是由于行号(我想保留),因此脚本的调试版本在某一点之后由于添加了{}等而与原始版本有所不同。控制台现在打印出了1500行以上的代码两者之间实际上并没有改变。

所以我的问题是,无论显示已更改代码的行号如何,如何仅显示已更改的代码时保持行号在脚本中的显示?

例如,说原始脚本的第24行说function getPage(),但由于调试,相同的代码已从第24行移至28。如何在保持行号完好无损的情况下从显示的内容中删除该代码,并且即使更改的代码行已经移动,仍保持它们各自的行号显示?

编辑:

我知道我错过了一些简单的事情来完成这项工作。我试过只使用filename#.readlines()作为文件#_lines,然后尝试多个不同的if和for循环,尝试对行编号,然后输出差异无济于事。如果在这种情况下我放弃了行编号,那么是的,确实确实只显示了我要显示的行,但是日志中没有任何内容可以告诉我它们所在的脚本还是代码中的哪一行。

0 个答案:

没有答案