我正在用下面的语句在词典中进行修饰:
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:
首先,您应该始终对pickle文件使用二进制模式。在有这一点的平台上(例如Windows),以文本模式打开一个文件意味着所有的行结束符都被翻译;},而在读取时{}又变成了{}。在
\n
在写入时变成{在python2上,默认pickle协议是基于ASCII的,但这并不意味着值的内容不会受到影响。对于您的
w
->;rb
示例,很可能嵌入了\n
的值写出为\r\n
,然后读为\r\n
,这意味着数据的长度发生了变化,触发错误消息,因为某些引用预期没有得到满足(由于字符串长度改变,没有读取右引号)。在事实上,您没有在其他非二进制组合中遇到这个特定的异常,这并不意味着您无论如何都没有问题。值最终仍可能被损坏。在
所有其他协议版本都是基于二进制的,这意味着您可以用更具创造性的方式破坏协议。在
相关问题 更多 >
编程相关推荐