如何在Ipython控制台中加载/查看pickle对象的结构? (Windows 7,Spyder,Ipython控制台)

时间:2017-03-06 10:17:56

标签: python-3.x ipython pickle spyder

我正在学习其他程序员编写的程序。所以我想查看腌制品的结构。    由于我需要知道pickle数据的结构,我试图使用Spyder在Ipython中加载pickle ......例如:

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()

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

2 个答案:

答案 0 :(得分:1)

structure你的意思并不清楚。如果我运行你的代码,我可以这样做:

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]

我可以使用相同数量的读取来恢复连续写入。如果我试图获得更多,我会得到EOFError: Ran out of input

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

答案 1 :(得分:1)

当我们不知道腌制的物品有多少时该怎么办......

找到答案:

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