Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
区分Python中的两个大文件_Python_Diff - Fatal编程技术网

区分Python中的两个大文件

区分Python中的两个大文件,python,diff,Python,Diff,我有两个大的文本文件,每个都接近2GB。我需要类似于diff f1.txt f2.txt的东西。在python中有没有快速完成此任务的方法?标准difflib太慢。我认为有一种更快的方法,因为difflib完全是用Python实现的。如何使用difflib来处理大文件?不要在内存中加载文件,而是在文件和diff的文件中逐块迭代。例如,一次100行 import difflib d = difflib.Differ() f1 = open('bigfile1') f2 = open('bigf

我有两个大的文本文件,每个都接近2GB。我需要类似于
diff f1.txt f2.txt的东西。在python中有没有快速完成此任务的方法?标准
difflib
太慢。我认为有一种更快的方法,因为
difflib
完全是用Python实现的。

如何使用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()

为什么不使用
diff f1.txt f2.txt
?@delnan:因为它将使我的脚本依赖于平台。Get diff of files只是脚本的其他部分之一。使用psyco acceleration或Unladen Swallow或PyPy build进行尝试是否可行?作为一个小参考,您能否告诉我们difflib需要多长时间来比较您计算机上的文件,以及您希望看到什么样的加速?@chmullig我需要两个列表(或文件)。第一个列表必须包含在第二个文件中添加的字符串,第二个列表必须包含在第二个文件中删除的字符串。另一个快速且可移植的选项是要求用户为平台安装diff实用程序,然后通过python包装器使用。python的
difflib
无论您做什么都很慢。两个几乎相同的文件,每个1MB,在最好的情况下需要0.5秒,在最坏的情况下需要几分钟。二进制差取0.033s。