将一个类保存到二进制文件中 - Python

11
我知道在C++中将类保存为二进制文件是可能的,可以使用以下方式:
file.write(Class_variable, size_of_class, amount_of_saves, file_where_to_save)

我想在Python中使用类似的方法来更轻松地编写和阅读大量数据。

我尝试了以下方法:

def Save_Game(player, room):
    address = 'Saves/player'

    file = open(address, 'wb')
    file.write(player)

    address = 'Saves/room'

    file = open(address, 'wb')
    file.write(room)

房间和玩家都是类对象。但它说:

TypeError: must be convertible to a buffer, not PlayerMarty

我能做什么?


2
使用pickle进行Python对象的序列化和反序列化。这些对象以pickle格式保存/加载。 - nishparadox
2个回答

29

pickle是你所需要的。 pickle模块实现了一种基本但强大的算法,用于序列化和反序列化Python对象结构。这是一个例子

import pickle

class MyClass:
    def __init__(self,name):
        self.name = name
    def display(self):
        print(self.name)

my = MyClass("someone")
pickle.dump(my, open("myobject", "wb"))
me = pickle.load(open("myobject", "rb"))
me.display()

1
好奇 - 你能把 save 变成 MyClass 类的一个函数吗?如果可以,那么你会传递什么代替 my?我试过用 self,但是出现了 TypeError。 - kuanb
@kuanb 你可以创建一个静态方法(或另一个辅助函数)来保存。实际上,你可以为 MyClass 创建“保存”和“加载”方法。 - nishparadox
但是pickle生成的文件是文本文件,而不是二进制文件! - IvanDi

5

您可以获取Python对象的字节以像这样保存和恢复它们,但直接进行操作并不容易。然而,标准的pickle模块极大地简化了这个过程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接