问题
I am learning the program written by other programmer. So I would like to view the structure of the pickled item. Since I need to know the structure of pickled data, I am trying to load pickle in Ipython using Spyder... 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()
I would like to know the structure of the .pkl file pickled here.
回答1:
It's not clear what you mean by structure
. If I run your code, I can then do:
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]
I can recover your successive writes with an equal number of reads. If I try to get more I get a EOFError: Ran out of input
.
What do you want to know? How any objects there are on the file? The structure of each object? The conversion between Python object and bytes on the file?
回答2:
What to do when we don't know how many items are pickled...
Found an answer:
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
来源:https://stackoverflow.com/questions/42622959/how-to-load-view-structure-of-pickled-object-in-ipython-console-windows-7-sp