22
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()

また

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

これを行う最も簡単な方法は何ですか?

4

4 に答える 4

26

pickleで (デ) シリアル化できます。下位互換性があります。つまり、将来のバージョンですべての古いプロトコルをサポートします。

import pickle

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

ただし、ピクルされたオブジェクトを別のコンピューターに転送する場合は、ピクルが安全ではない可能性があるため、接続が改ざんできないことを確認してください(これはすべてのピクル ユーザーが知っておくべき記事です)。

別の代替手段は、古いモジュールmarshalです。

于 2010-02-26T22:12:51.753 に答える
11

私はこのコードを使用します:

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)

このコードは、実際のクラスインスタンス名からクラスを保存およびロードします。コードは私のブログhttp://www.schurpf.com/python-save-a-class/からのものです。

于 2012-02-08T21:29:30.380 に答える
2

Pythonのpickleライブラリを見てください。

于 2010-02-26T22:05:52.507 に答える