python - 以有效的方式将类读写到文件中

标签 python file io

我想用 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中有没有方法可以做到这一点?

最佳答案

Python 有 pickle - 可用于序列化对象的模块。如果使用 >= 1 的协议(protocol)版本,数据将序列化为二进制格式。您可以像这样使用泡菜:

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 需要访问已腌制对象的定义。

关于python - 以有效的方式将类读写到文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7900944/

相关文章:

带有 AttributeError : 'module' object has no attribute 'FeatureDetector_create' 的 OpenCV 的 Python 绑定(bind)

c - 尝试从文件中读取数据并使用 strtok() 和 fgets() 在 c 中对其进行标记化

.net - 防止 IO.GetDirectories() 遵循符号链接(symbolic link)

c++ - 在 C++ 中读取大的 txt 文件

c++:如何优化IO?

java - 如何在 JComponent 中显示 ArrayList 项

python - 更新 Dataframe 列的有效方法

python - 如何使用 flask 显示目录中的所有图像

python - 如何使用 python 中的现有文本文件添加 XML 标记新文件?

perl - 如何在Perl中将文件与目录区分开?