使用方案2进行酸洗:Python3->;2数据

使用方案2进行酸洗:Python3->;2数据,python,python-2.7,python-3.x,pickle,Python,Python 2.7,Python 3.x,Pickle,我试图对在Python3.2中创建的数据数组进行数据处理,对其进行pickle,然后在Python2.7中打开它。然而,Python2.7反对某些数据,即使在数据样本上它做得很好,我想知道如何找出哪里出了问题 因此在Python3.2中: import pickle with open('c:\\test.pickle', mode='wb') as f: pickle.dump(t_array, f, 2) 然后,在阅读Python2.7时: import pickle f = op

我试图对在Python3.2中创建的数据数组进行数据处理,对其进行pickle,然后在Python2.7中打开它。然而,Python2.7反对某些数据,即使在数据样本上它做得很好,我想知道如何找出哪里出了问题

因此在Python3.2中:

import pickle
with open('c:\\test.pickle', mode='wb') as f:
    pickle.dump(t_array, f, 2)
然后,在阅读Python2.7时:

import pickle
f = open('c:\\test.pickle', mode='rb')
t_data = pickle.load(f)
错误是:

File "C:\Python27\lib\pickle.py", line 1378, in load
    return Unpickler(file).load()
File "C:\Python27\lib\pickle.py", line 858, in load
    dispatch[key](self)
File "C:\Python27\lib\pickle.py", line 1217, in load_build
    setstate(state)
TypeError: must be char, not unicode
数据是一个DICT数组,最多嵌套两层,例如:

{'key3': '3', 'key2': 1.1, 'key1': 1, 'dict': {'dkey2': 2, 'dkey1': 1}}

这里(可能)出了什么问题?有没有什么简单的方法可以查看原始(大型)数据集中是什么导致了问题?

Pickle没有看上去那么好。安全漏洞和许多类似的问题


更好的方法是创建自己的保存格式,例如使用json。

您可以发布一个链接,指向您正在转储的数据的文本表示形式(假设它可以表示为文本)?它是一个约30MB的文件(在pickle时),所以我不确定这会有多大帮助。这也是我在识别错误的特定原因时遇到一些困难的部分原因…所有数据都可以表示为文本,与给定的示例非常相似,只是有更多的键值对。这个示例对我很有用(当然,字符串作为Unicode对象返回)。所以我真的说不出哪里出了问题。对不起,如果我不清楚的话——在一些小样本的数据上,这个过程运行得很好。因此,给出的示例对我也适用,但实际的数据结构(要大得多)并没有改变。我会试着多做一些尝试,看看我是否能找到一个失败的小例子。这就是最终最好的例子。安全性在这里不是一个问题,我最终能够使用eval()完成大部分工作。