有没有办法测试两个pkl文件在python中是否具有相同的数据?

有没有办法测试两个pkl文件在python中是否具有相同的数据?,python,pickle,Python,Pickle,我需要比较两个对象在python中是否具有相同的数据,但某些类型不支持==。我可以用这两个文件制作pkl文件,然后比较字节数据吗?如果这不起作用,有没有办法比较它们的字节数据(比如说,我们不知道是否正在处理可能包含不同数据类型、列表、矩阵、数据帧等的两个元组)?编写一个比较函数,根据我们是否正在查看包含矩阵、数据帧等的元组,它有不同的大小写,这看起来非常混乱。如果对象没有实现\uuuuueq\uuuueq,那么进行equals比较可能是无效的 如果您有办法定义它们是否相等,只需定义自己的比较方法

我需要比较两个对象在python中是否具有相同的数据,但某些类型不支持==。我可以用这两个文件制作pkl文件,然后比较字节数据吗?如果这不起作用,有没有办法比较它们的字节数据(比如说,我们不知道是否正在处理可能包含不同数据类型、列表、矩阵、数据帧等的两个元组)?编写一个比较函数,根据我们是否正在查看包含矩阵、数据帧等的元组,它有不同的大小写,这看起来非常混乱。

如果对象没有实现
\uuuuueq\uuuueq
,那么进行equals比较可能是无效的

如果您有办法定义它们是否相等,只需定义自己的比较方法,该方法查看两个对象的属性,如果它们相等,则返回true。即:

 def cmp(obj_a, obj_b):
     return a.att1 == b.att1 and a.att2 == b.att2 ... etc 

关于Pickle,它不涉及原始数据的内容,只是如果取消Pickle,它将生成相同的对象。

有一个很好的模块,名为File Compare,我已经使用过几次了。我不是一个真正的编程天才,所以我不想给你一些古怪的建议。在我使用此类应用程序的有限经验中,python模块在大约90%的时间内工作良好。以下是我使用的代码:

  injury_compare =  filecmp.cmp('/Users/MacBookPro15/injuryc', '/Users/MacBookPro15/injury")

  print "injury files are %s" % inury_compare
比较返回一个真/假,但我也认为模块中有一些东西为不同的行返回一个“+”,因此您也可以使用它。基本上,如果你得到一个“+”返回的文件是不同的。我还可以推荐使用bash/linux实用程序hextump,它以一种非常简洁的方式向您显示低级字节。它也很简单…hextumpfile1。即使像我这样的人对hexdump输出的内容缺乏一点了解,但即使不知道字节的确切含义,也可以分辨出一些模式。bash/linux中还有一个不同的函数,我认为您可以相应地运行它(不是100%确定,但听起来很熟悉): 差异文件1文件2


很抱歉,我不能清楚地表达其中一些细节,但我希望这能有所帮助。祝你好运

甚至不能保证与
==
比较相等的两个对象会进行相同的pickle:

>>> x = (1,)
>>> y = (x, x)
>>> z = ((1,), (1,))
>>> y == z
True
>>> pickle.dumps(y) == pickle.dumps(z)
False
>>> {-1, -2} == {-2, -1}
True
>>> pickle.dumps({-1, -2}) == pickle.dumps({-2, -1})
False
序列化对象以比较其序列化形式不是一种可行的通用相等比较。如果您想定义自己的相等概念,编写自己的相等比较函数可能是最佳选择