python 对象是字符串和数字的嵌套列表。
该文件被打开以写入'w'(不是'wb'),但cPickle被告知使用protocol = 1(所以二进制)。
序列化和反序列化代码在 Linux 上运行良好。我无法恢复保存在 Windows 机器(Python 2.6)上的对象。
我知道(现在)该文件应该在 Windows 中显式打开为“wb”,因为行尾。也就是说,写入的对象是一个嵌套列表并且不包含 \n 所以我不确定这是否重要。
我的问题是可以做些什么来恢复数据?
这是结果print repr(open(fqfn, 'rb').read(15))
:
']q\x01(]q\x02]q\x03(U\x0fst'
任何想法表示赞赏。
我按照mhawkel = cPickle.load(open(fqfn, 'r'))
的建议进行了尝试,但 Windows 向我发送了 EOF 错误。
如果我直接在十六进制编辑器中打开文件,我可以简单地替换实例,'\r\n'
然后10
使用13
二进制模式恢复吗?
序列化的输入类似于:
[['start', 3454654], [1234567645, -1 , 99], [1234567900, 1 , 56], ...]
我知道输入的顺序、每个列表的长度以及一些值(例如开头的字符串和一些数字)。
所以我想我的问题是我是否可以通过编写处理二进制编码的脚本来反序列化。我不需要将它放入 python 对象——ascii 就足够了。