Python pickle对存储pickled对象的文件使用不同的文件模式的奇怪行为

2024-10-02 00:29:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用下面的语句在词典中进行修饰:

pickle.dump(paramsToSave, open('testvars.txt','wb'))

我不赞成以下几点:

^{pr2}$

现在,当我在pickling中使用文件模式'w',在unpickling中使用'r'时,就可以了。wb rb、wb-r组合相同。在

但当我使用w-rb组合时,我得到一个错误:

ValueError: insecure string pickle

有人能解释一下这种行为吗?使用哪种文件模式组合是正确的?在

编辑:我正在Windows7上使用Python2.6.6


Tags: 文件txt模式语句opendumppickle词典
1条回答
网友
1楼 · 发布于 2024-10-02 00:29:03

首先,您应该始终对pickle文件使用二进制模式。在有这一点的平台上(例如Windows),以文本模式打开一个文件意味着所有的行结束符都被翻译;\n在写入时变成{},而在读取时{}又变成了{}。在

在python2上,默认pickle协议是基于ASCII的,但这并不意味着值的内容不会受到影响。对于您的w->;rb示例,很可能嵌入了\n的值写出为\r\n,然后读为\r\n,这意味着数据的长度发生了变化,触发错误消息,因为某些引用预期没有得到满足(由于字符串长度改变,没有读取右引号)。在

事实上,您没有在其他非二进制组合中遇到这个特定的异常,这并不意味着您无论如何都没有问题。值最终仍可能被损坏。在

所有其他协议版本都是基于二进制的,这意味着您可以用更具创造性的方式破坏协议。在

相关问题 更多 >

    热门问题