2011-02-04 149 views
5

我有两个大的文本文件,每个大约2GB。我需要像diff f1.txt f2.txt。有没有办法在python中快速完成这项任务?标准difflib太慢了。我假设有更快的方法,因为difflib完全在Python中实现。在Python中比较两个大文件

+6

为什么不使用`diff f1.txt f2.txt`? – delnan 2011-02-04 14:34:28

+1

@delnan:因为它会使我的脚本平台依赖。获取文件差异只是脚本其他部分的其中一个 – 2011-02-04 14:38:30

回答

4

如何使用difflib以便脚本可以处理大文件?不要将文件加载到内存中,而是遍历文件和diff区块中的文件。例如,一次有100行。

import difflib 

d = difflib.Differ() 

f1 = open('bigfile1') 
f2 = open('bigfile2') 

b1 = [] 
b2 = [] 

for n, lines in enumerate(zip(f1,f2)): 
    if not (n % 100 == 0): 
     b1.append(lines[0]) 
     b2.append(lines[1]) 
    else: 
     diff = d.compare("".join(b1), "".join(b2)) 
     b1 = [] 
     b2 = [] 
     print ''.join(list(diff)) 

diff = d.compare("".join(b1), "".join(b2)) 
print ''.join(list(diff)) 
f1.close() 
f2.close()