2016-04-13 14 views
0

私はその後、私は次のように私は後でそれを使用する可能性がある場合に、これらを保存したい'pickle'で 'namedtuple'構造体を使用するにはどうすればよいですか?

from collections import namedtuple 
import random 
demand={} 
Site_Product=namedtuple("Site_Product", ["site", "product"]) 
Products=['P1','P2','P3']  
for P in Products: 
    for node in range(1,4): #Suppliers: 
     sp=Site_Product(site=node, product=P) 
     demand={sp:random.normalvariate(30, 25)} 

を使用して、辞書のタプルを作成しました:

import pickle 
PIK = "pickle_SC_detail.dat" 
with open(PIK, "wb") as f: 
    pickle.dump(demand, f) 

私は主に私を指してエラーの束を得ましたnamedtuple構造:

File "C:\Users\Ozgu\Anaconda2\lib\pickle.py", line 1376, in dump 
    Pickler(file, protocol).dump(obj) 

    File "C:\Users\Ozgu\Anaconda2\lib\pickle.py", line 224, in dump 
    self.save(obj) 

    File "C:\Users\Ozgu\Anaconda2\lib\pickle.py", line 286, in save 
    f(self, obj) # Call unbound method with explicit self 

    File "C:\Users\Ozgu\Anaconda2\lib\pickle.py", line 655, in save_dict 
    self._batch_setitems(obj.iteritems()) 

    File "C:\Users\Ozgu\Anaconda2\lib\pickle.py", line 668, in _batch_setitems 
    save(k) 

    File "C:\Users\Ozgu\Anaconda2\lib\pickle.py", line 331, in save 
    self.save_reduce(obj=obj, *rv) 

    File "C:\Users\Ozgu\Anaconda2\lib\pickle.py", line 401, in save_reduce 
    save(args) 

    File "C:\Users\Ozgu\Anaconda2\lib\pickle.py", line 286, in save 
    f(self, obj) # Call unbound method with explicit self 

    File "C:\Users\Ozgu\Anaconda2\lib\pickle.py", line 568, in save_tuple 
    save(element) 

    File "C:\Users\Ozgu\Anaconda2\lib\pickle.py", line 286, in save 
    f(self, obj) # Call unbound method with explicit self 

    File "C:\Users\Ozgu\Anaconda2\lib\pickle.py", line 754, in save_global 
    (obj, module, name)) 

PicklingError: Can't pickle \<class '__main__.Site_Product'\>: it's not found as __main__.Site_Product 

は、どちらかの周りに(キーの)タプルの私の辞書を維持するか、私を記録するための作業がありますデータが安価な方法で共存するようにする

+0

Python 2.7.11を使用して2つのコードスニペットをコピーしました。 – Skirrebattie

+0

WindowsではPython 2.7.11を使用して問題のコードが動作します。 'Site_Product'は実際のコードのトップレベル(関数やメソッドの中ではない)で定義されていますか? – martineau

+0

はい、それは問題でなければなりません!彼らはさまざまな機能を持っています。私はnamedtupleをグローバルにしたり、一緒に動かそうとします。 – Ozgu

答えて

0

私は、2つの異なる機能でコードを定義していました。それらを組み合わせることは、おそらく問題を解決するでしょう。

関連する問題