2017-03-06 21 views
0

他のプログラマーが書いたプログラムを習っています。ですから、私はピクルされたアイテムの構造を見たいと思います。 私は例えば...私はスパイダーを使用してIpythonでピクルスをロードしようとしています、漬けデータの構造を知っておく必要があるので:Ipythonコンソールでピクルされたオブジェクトの構造をロード/表示する方法は? (Windows 7、Spyder、Ipythonコンソール)

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ファイルの構造を知っていただきたいと思います。

答えて

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オブジェクトとバイトの間の変換?私たちが漬けされているどのように多くの項目がわからないときに実行する

+0

は答えをいただき、ありがとうございます。実際には、コンソールでピクルされたデータを取得したかったのです。 私は私が知っていることができれば知りたいのですが例えばためのローディング なしの漬け物に含まれるデータの種類: タイプ(X)のdict タイプ(Y)である:我々はピクルスをロードするための2倍を与えることができ のでリスト – Abhishek

+0

私たちが知っているのは、2つのアイテムだけが節約されていることです。 x = pickle.load(f) y = pickle.load(f) しかし、何アイテムがあるのか​​わからないとき...そのような問題にどう対処するか。 – Abhishek

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 
関連する問題