2010-02-26 18 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() 

ocómo guardar/clase que lea en su totalidad en Python

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

lo que es la forma más sencilla de hacer esto?

+0

¿Algún otro requisito? Velocidad/tamaño/seguridad/portabilidad http://docs.python.org/library/json.html podría ser una opción. – voyager

+0

requisito = fácil y rápido para hacer esto y hacer otro trabajo) – Mike

Respuesta

9

Puede (de) serializar con pickle. Es compatible con versiones anteriores, es decir, admitirá todos los protocolos antiguos en futuras versiones.

import pickle 

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

Pero cuenta que si la transferencia de objetos en vinagre a otro equipo, asegúrese de que la conexión no puede ser manipulado como pickle might be unsecure (este es un artículo que cada usuario debe saber salmuera).

Otra alternativa es el módulo anterior marshal.

+0

Nadia ... Contestando incluso cuando está fuera de línea :) http://stackoverflow.com/users/97828/nadia-alramli – voyager

3

Eche un vistazo a la biblioteca pickle de Python.

0

utilizo este código:

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) 

Este código guarda y carga la clase de su nombre real instancia de clase. El código es de mi blog http://www.schurpf.com/python-save-a-class/.

Cuestiones relacionadas