2011-10-26 4 views
2

파이썬으로 클래스를 파일에 저장하고 싶습니다. 나는 이런 식으로 뭔가를 원하는 , 나는이 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; 

    } 

거기에 파이썬에서이 작업을 수행하는 방법이 있습니까?

+0

내가 무슨 뜻인지는 분명치 않지만, 파이썬의 피클 (http://docs.python.org/library/pickle.html)을 찾고 있다면 파이썬 객체 (클래스 포함) 파일로. –

답변

8

파이썬에는 객체 직렬화에 사용할 수있는 pickle- 모듈이 있습니다. 프로토콜 버전이> = 1이면 데이터가 이진 형식으로 serialize됩니다. 이 같은 피클을 사용할 수 있습니다 쉽게 그것으로 매우 복잡한 구조를 직렬화 할 수 있습니다

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 

피클이 같이 중첩 된 객체와 사이클과 나쁜 물건을 처리합니다. 몇 가지 제한 사항이 있습니다. 특히 피클은 피클 링 된 객체의 정의에 액세스해야합니다.