Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.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_Binary_Difflib - Fatal编程技术网

Python 确定两个大二进制文件的差异?

Python 确定两个大二进制文件的差异?,python,binary,difflib,Python,Binary,Difflib,我需要比较并得到两个大的二进制文件(高达100 MB)的差异 对于ASCII格式,我可以使用: import difflib file1 = open('large1.txt', 'r') file2 = open('large2.txt', 'r') diff = difflib.ndiff(file1.readlines(), file2.readlines()) difference = ''.join(x[2:] for x in diff if x.startswith('- '))

我需要比较并得到两个大的二进制文件(高达100 MB)的差异

对于ASCII格式,我可以使用:

import difflib
file1 = open('large1.txt', 'r')
file2 = open('large2.txt', 'r')
diff = difflib.ndiff(file1.readlines(), file2.readlines())
difference = ''.join(x[2:] for x in diff if x.startswith('- '))
print(difference)
如何使它适用于二进制文件?尝试了不同的编码、二进制读取模式,但没有任何效果


编辑:我使用
.vcl
二进制文件

difflib对于大文件来说会非常慢,100MB会被归类为非常大的文件

计时:最坏情况下的基本Ratcliff Obershelp算法是立方时间,预期情况下是二次时间。SequenceMatcher在最坏情况下是二次时间,并且预期情况行为以复杂的方式依赖于序列共有多少个元素最佳情况时间是线性的

如果您能容忍这种缓慢,请尝试
difflib.SequenceMatcher
,它几乎适用于所有类型的数据

这是一个灵活的类,用于比较任何类型的序列对,只要序列元素是可散列的


您说要比较的文件是二进制文件,但您将其视为大型文本文件。您能否澄清您使用的数据类型?@Schmuddi这些是.vcl类型的文件,包含来自仪器的数据。使用情况如何?您需要用于同步的增量?如果需要,也许
librsync
包装器是实用的-有两个答案可能对比较二进制文件有用。@Schmuddi我将实时更新二进制文件,每30分钟后我需要复制新更新的数据并将其发送到服务器。我的计划是比较文件,获得差异并每次发送。