2016-04-13 5 views
0

Ich habe Tupel von Wörterbuch erstellt mitWie kann ich meine 'nametuple' Struktur mit 'pickle' verwenden?

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

Dann möchte ich diese speichern, falls ich es später wie folgt verwendet werden könnte:

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

ich ein paar Fehler in erster Linie bekam zeigt meine namedtuple Struktur:

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 

gibt es eine Arbeit um entweder für meine dict von Tupel zu halten (für Schlüssel) oder der Aufnahme meiner Daten in einer kostengünstigen Weise, so dass sie nebeneinander bestehen?

+0

kopiert Ihre zwei Code-Schnipsel, funktionierte gut für mich mit Python 2.7.11 – Skirrebattie

+0

Code in Frage funktioniert für mich mit Python 2.7.11 unter Windows. Sind Sie sicher, dass "Site_Product" auf der obersten Ebene (nicht innerhalb einer Funktion oder Methode) Ihres echten Codes definiert ist? – martineau

+0

Ja, das muss das Problem sein! Sie sind in verschiedenen Funktionen, ich werde versuchen, namedtuple global zu machen oder sie zusammen zu bewegen. – Ozgu

Antwort

0

Es stellte sich heraus, dass ich die Codes in zwei verschiedenen Funktionen definierte. Die Kombination wird das Problem wahrscheinlich lösen.

Verwandte Themen