Чтение классов записи в файлы эффективным способом - PullRequest
2 голосов
/ 26 октября 2011

Я хочу сохранить классы в файл на 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 метод для этого?

1 Ответ

8 голосов
/ 26 октября 2011

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 позаботится о вложенных объектах, циклах и подобных вещах, поэтому вы можете легко сериализовать довольно сложные структуры. Обратите внимание, что существуют некоторые ограничения, в особенности для pickle требуется доступ к определениям маринованных объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...