【问题标题】:Python program to compare two files for showing the differencePython程序比较两个文件以显示差异
【发布时间】:2014-11-14 15:13:58
【问题描述】:

我有以下代码来比较两个文件。如果我将它们指向 4 或 5 MB 的文件,我希望该程序运行。当我这样做时,python 控制台中的提示光标只是闪烁,并且没有显示输出。有一次,我跑了一夜,第二天早上它还在闪烁。我可以在此代码中进行哪些更改?

import difflib

file1 = open('/home/michel/Documents/first.csv', 'r')
file2 = open('/home/michel/Documents/second.csv', 'r')

diff = difflib.ndiff(file1.readlines(), file2.readlines())
delta = ''.join(diff)
print delta

【问题讨论】:

  • 你检查过CPU使用率吗?是 100% 吗?
  • 我不喜欢他们的解决方案显示结果的方式。我喜欢使用 context_diff 或 ndiff。 :(

标签: python file compare difflib


【解决方案1】:

如果你使用基于linux的系统,你可以调用外部命令diff,你可以使用它的结果。我用 diff 命令尝试了两个文件 14M 和 9.3M。需要 1.3 秒。

real    0m1.295s
user    0m0.056s
sys     0m0.192s

【讨论】:

    【解决方案2】:

    当我尝试以您的方式使用difflib 时,我遇到了同样的问题,因为对于大文件difflib 将整个文件缓冲在内存中,然后比较它们。作为解决方案,您可以部分比较两个文件。这里我每 100 行做一次。

    import difflib
    
    file1 = open('1.csv', 'r')
    file2 = open('2.csv', 'r')
    
    lines_file1 = []
    lines_file2 = []
    
    # i: number of line
    # line: content of line
    for i, line in enumerate(zip(file1, file2)):
        # check if it is in line 100
        if not (i % 100 == 0):
            lines_file1.append(line[0])
            lines_file2.append(line[1])
        else:
            # show the different for 100 line
            diff = difflib.ndiff("".join(lines_file1), "".join(lines_file2))
            print ''.join(list(diff))
            lines_file1 = []
            lines_file2 = []
    
    # show the different if any lines left
    diff = difflib.ndiff("".join(lines_file1), "".join(lines_file2))
    print ''.join(list(diff))
    file1.close()
    file2.close()
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2015-08-10
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多