2010-02-26 6 views
6
som = SOM_CLASS() # includes many big difficult data structures 
som.hard_work() 
som.save_to_disk(filename) 
#then later or another program 
som = SOM_CLASS() 
som.read_from_file(filename) 
som.do_anythink_else() 

oderwie zum Speichern/Lesen Klasse vollständig in Python

som = SOM_CLASS() 
save(som) 
#... 
load(som) 
som.work() 

was einfachste Weg ist, dies zu tun?

+0

Eine andere Anforderung? Geschwindigkeit/Größe/Sicherheit/Portabilität? http://docs.python.org/library/json.html könnte eine Option sein. – voyager

+0

Anforderung = einfach und schnell, dies zu tun und eine andere Arbeit) – Mike

Antwort

9

Sie können (de) serialisieren mit pickle. Es ist abwärtskompatibel, d. H. Es unterstützt alle alten Protokolle in zukünftigen Versionen.

import pickle 

som = SOM_CLASS() 
fileObject = <any file-like object> 
pickle.dump(som, fileObject) 
#... 
som = pickle.load(fileObject) 
som.work() 

Aber beachten Sie, dass in Essig eingelegte Objekte auf einem anderen Computer übertragen, stellen Sie sicher, dass die Verbindung nicht mit so pickle might be unsecure (dies ist ein Artikel, der jede Gurke Benutzer kennen soll) manipuliert werden kann. Eine andere Alternative ist das ältere Modul marshal.

+0

Nadia ... Beantworten selbst wenn offline :) http://Stackoverflow.com/users/97828/nadia-alramli – voyager

3

Werfen Sie einen Blick auf Pythons pickle Bibliothek.

0

Ich benutze diesen Code:

import cPickle 
import traceback 

class someClass(): 
    def __init__(self): 
     #set name from variable name. http://stackoverflow.com/questions/1690400/getting-an-instance-name-inside-class-init 
     (filename,line_number,function_name,text)=traceback.extract_stack()[-2] 
     def_name = text[:text.find('=')].strip() 
     self.name = def_name 

     try: 
      self.load() 
     except: 
      ############## 
      #to demonstrate 
      self.someAttribute = 'bla' 
      self.someAttribute2 = ['more'] 
      ############## 

      self.save() 

    def save(self): 
     """save class as self.name.txt""" 
     file = open(self.name+'.txt','w') 
     file.write(cPickle.dumps(self.__dict__)) 
     file.close() 

    def load(self): 
     """try load self.name.txt""" 
     file = open(self.name+'.txt','r') 
     dataPickle = file.read() 
     file.close() 

     self.__dict__ = cPickle.loads(dataPickle) 

Dieser Code speichert und lädt die Klasse von ihrem tatsächlichen Klasseninstanznamen. Code ist von meinem Blog http://www.schurpf.com/python-save-a-class/.