如何测试文件是否由pickle创建?

时间:2012-12-18 19:16:32

标签: python pickle

有没有办法检查pickle是否创建了文件?我可以捕获pickle.load抛出的异常,但没有特定的“不是pickle文件”异常。

2 个答案:

答案 0 :(得分:8)

Pickle文件没有标题,所以没有标准方法来识别它们,而不是尝试取消标记,并查看是否有任何例外。

您可以通过继承Pickler()模块中的Unpickler()pickle类来定义您自己的增强协议,其中包含某种类型的标头。但是,使用速度更快的cPickle模块无法做到这一点,因为其中有工厂函数无法进行子类化 [1]

更灵活的方法是定义您自己的独立类,在其实现中使用其中任何一个模块中的相应Pickler()Unpickler()个实例。

<强>更新

所有pickle文件的最后一个字节应该是pickle.STOP操作码,所以虽然没有标题, 实际上是一个非常小的预告片,这将是一个相对简单的事情检查。

根据您的确切用法,您可以通过更精细的补充来避免补充,因为任何超过腌制对象表示中的STOP操作码的数据都会被忽略 [2]

Python 2文档中的 [1] Footnote [2] [2] pickle.loads()的文档,它也适用于pickle.load(),因为它目前是根据后者实现的。

答案 1 :(得分:7)

除了尝试去除它之外没有其他确定的方法,并且可以捕获异常。