Python 3.x 如何在Ipython控制台中加载/查看pickled对象的结构?(Windows 7、Spyder、Ipython控制台)

Python 3.x 如何在Ipython控制台中加载/查看pickled对象的结构?(Windows 7、Spyder、Ipython控制台),python-3.x,ipython,pickle,spyder,Python 3.x,Ipython,Pickle,Spyder,我正在学习其他程序员编写的程序。所以我想看看腌制食品的结构。 因为我需要知道pickle数据的结构,所以我尝试使用Spyder在Ipython中加载pickle。。。e、 g: import pickle data1 = {'a': [1, 2.0, 3, 4+6j], 'b': ('string', u'Unicode string'), 'c': None} selfref_list = [1, 2, 3] #selfref_list.append(s

我正在学习其他程序员编写的程序。所以我想看看腌制食品的结构。 因为我需要知道pickle数据的结构,所以我尝试使用Spyder在Ipython中加载pickle。。。e、 g:

import pickle

data1 = {'a': [1, 2.0, 3, 4+6j],
         'b': ('string', u'Unicode string'),
         'c': None}

selfref_list = [1, 2, 3]
#selfref_list.append(selfref_list)

output = open('data.pkl', 'wb')

# Pickle dictionary using protocol 0.
pickle.dump(data1, output)

# Pickle the list using the highest protocol available.
pickle.dump(selfref_list, output, -1)

output.close()

我想知道这里pickle的.pkl文件的结构。

不清楚
结构是什么意思。如果我运行您的代码,我可以执行以下操作:

In [6]: with open('data.pkl','rb') as f:
   ...:     x = pickle.load(f)
   ...:     y = pickle.load(f)
   ...:     
   ...:     
In [7]: x
Out[7]: {'a': [1, 2.0, 3, (4+6j)], 'b': ('string', 'Unicode string'), 'c': None}
In [8]: y
Out[8]: [1, 2, 3]
我可以用相同的读取次数恢复您的连续写入。如果我试图获得更多,我会得到一个
eoferor:输入用完了


你想知道什么?文件中有多少对象?每个对象的结构?Python对象和文件上字节之间的转换?

不清楚您所说的
结构是什么意思。如果我运行您的代码,我可以执行以下操作:

In [6]: with open('data.pkl','rb') as f:
   ...:     x = pickle.load(f)
   ...:     y = pickle.load(f)
   ...:     
   ...:     
In [7]: x
Out[7]: {'a': [1, 2.0, 3, (4+6j)], 'b': ('string', 'Unicode string'), 'c': None}
In [8]: y
Out[8]: [1, 2, 3]
我可以用相同的读取次数恢复您的连续写入。如果我试图获得更多,我会得到一个
eoferor:输入用完了


你想知道什么?文件中有多少对象?每个对象的结构?Python对象和文件上字节之间的转换?

当我们不知道有多少项被pickle时该怎么办

找到了答案:

unpickled_store = []
file_id = open('data.pkl','rb')
while True:
        try:
            unpickled_item = pickle.load(file_id)
            unpickled_store.append(unpickled_item)
        except EOFError:
            break

当我们不知道腌制了多少东西时该怎么办

找到了答案:

unpickled_store = []
file_id = open('data.pkl','rb')
while True:
        try:
            unpickled_item = pickle.load(file_id)
            unpickled_store.append(unpickled_item)
        except EOFError:
            break

谢谢你的回答。实际上,我想在控制台中检索pickle数据。我想知道我是否可以知道pickle对象在不加载的情况下包含什么类型的数据,例如:type(x)是dict type(y):list,因为当我们知道只有2个项目被pickle时,我们可以给2次加载pickle x=pickle.load(f)y=pickle.load(f)但当我们不知道有多少项目时…那么如何处理这些问题。谢谢你的回答。实际上,我想在控制台中检索pickle数据。我想知道我是否可以知道pickle对象在不加载的情况下包含什么类型的数据,例如:type(x)是dict type(y):list因为当我们知道只有2个项目被pickle时,我们可以给2次加载pickle x=pickle.load(f)y=pickle.load(f)但是当我们不知道有多少项目时…那么如何处理这些问题呢。