高效地读写类到文件

2 投票
1 回答
7278 浏览
提问于 2025-04-17 05:01

我想在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

Python有一个叫做pickle的模块,可以用来把对象转换成一种可以保存或传输的格式。使用版本号大于等于1的协议时,数据会被转换成二进制格式。你可以这样使用pickle:

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需要能够访问被序列化对象的定义。

撰写回答