2011-10-26 44 views
2

我希望將類保存到python中的文件中。 我想是這樣的,我有一個類似的類在Python中,類似這樣的C++結構:以高效的方式將文件寫入文件

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的pickle - http://docs.python.org/library/pickle.html - 來編寫任何python對象(包括類)到一個文件。 –

回答

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對象的定義。