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?
kopiert Ihre zwei Code-Schnipsel, funktionierte gut für mich mit Python 2.7.11 – Skirrebattie
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
Ja, das muss das Problem sein! Sie sind in verschiedenen Funktionen, ich werde versuchen, namedtuple global zu machen oder sie zusammen zu bewegen. – Ozgu