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

hoặclàm thế nào để tiết kiệm/lớp đọc hoàn toàn bằng Python

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

Cách đơn giản nhất để làm điều này là gì?

+0

Bất kỳ yêu cầu nào khác? Tốc độ/kích thước/bảo mật/tính di động? http://docs.python.org/library/json.html có thể là một tùy chọn. – voyager

+0

yêu cầu = dễ dàng và nhanh chóng để làm điều này một công việc khác) – Mike

Trả lời

9

Bạn có thể (de) tuần tự hóa với pickle. Nó tương thích ngược, tức là nó sẽ hỗ trợ tất cả các giao thức cũ trong các phiên bản sau.

import pickle 

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

Nhưng nhớ rằng nếu bạn chuyển đối tượng ngâm một máy tính khác, đảm bảo kết nối không thể được giả mạo như pickle might be unsecure (đây là một bài viết mà mọi người sử dụng dưa nên biết).

Một giải pháp thay thế khác là mô-đun cũ marshal.

+0

Nadia ... Trả lời ngay cả khi ngoại tuyến :) http://stackoverflow.com/users/97828/nadia-alramli – voyager

0

tôi sử dụng mã này:

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) 

Mã này tiết kiệm và tải các lớp từ tên lớp dụ thực tế của nó. Mã từ blog của tôi http://www.schurpf.com/python-save-a-class/.

Các vấn đề liên quan