2011-10-26 16 views
2

私はクラスをファイルに保存したいと思っています。私はこのような何かをしたい が、私はこのCの++の構造体と同様に、Pythonで同様のクラスを持っている:効率的な方法でファイルにクラスを読み込みます。

struct WebSites 
    { 
     char SiteName[100]; 
     int Rank; 
    }; 

、私はこのような何かを書きたい:これで簡単に読み取ることができる

void write_to_binary_file(WebSites p_Data) 
{ 
     fstream binary_file("c:\\test.dat",ios::out|ios::binary|ios::app); 
     binary_file.write(reinterpret_cast<char *>(&p_Data),sizeof(WebSites)); 
     binary_file.close(); 
} 

 void read_from_binary_file() 
    { 
     WebSites p_Data; 
     fstream binary_file("c:\\test.dat",ios::binary|ios::in); 
     binary_file.read(reinterpret_cast<char *>(&p_Data),sizeof(WebSites)); 
     binary_file.close(); 

     cout<<p_Data.SiteName<<endl; 
     cout<<"Rank :"<< p_Data.Rank<<endl; 

    } 

これを行うにはPythonのメソッドがありますか?

+0

私はあなたが何を意味しているのかはっきりしていませんが、Pythonのピクル(http://docs.python.org/library/pickle.html)を探しているかもしれないと思います。ファイルに。 –

答えて

8

Pythonには、オブジェクトをシリアル化するために使用できるpickleモジュールがあります。プロトコルバージョン> = 1を使用すると、データはバイナリ形式にシリアル化されます。あなたはこのようにピクルスを使用することができます:あなたは簡単にそれを非常に複雑な構造をシリアル化することができますので、

class WebSites(object): 
    def __init__(): 
     self.SiteName = "" 
     self.Rank = 0 

import cPickle 
# to serialize the object 
with open("data.dump", "wb") as output: 
    cPickle.dump(WebSites(), output, cPickle.HIGHEST_PROTOCOL) 

# to deserialize the object 
with open("data.dump", "rb") as input: 
    obj = cPickle.load(input) # protocol version is auto detected 

ピクルスは、次のようにネストされたオブジェクトとサイクルと悪いものの世話をします。いくつかの制限があることに注意してください。特に、pickleはpickledオブジェクトの定義にアクセスする必要があります。

関連する問題