python--使用pickle序列化对象

Posted 一只小小寄居蟹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python--使用pickle序列化对象相关的知识,希望对你有一定的参考价值。

pickle序列化对象

如果希望透明地存储 Python 对象,而不丢失其身份和类型等信息,则需要某种形式的对象序列化:它是一个将任意复杂的对象转成对象的文本或二进制表示的过程。

同样,必须能够将对象经过序列化后的形式恢复到原有的对象。在 Python 中,这种序列化过程称为 pickle,

可以将对象 pickle 成字符串、磁盘上的文件或者任何类似于文件的对象,也可以将这些字符串、文件或任何类似于文件的对象 unpickle 成原来的对象

代码实例

import pickle
class MyPickle(object):

    def __init__(self,file_name):
        self.file_name = file_name

    def dump(self,obj):
        """
        序列化对象
        :param obj: 
        :return: 
        """
        with open(self.file_name,‘ab‘) as f:
            pickle.dump(obj, f)
            print(‘dump data‘,obj.__dict__)

    def loaditer(self):
        """
        迭代反序列化对象
        :return: 
        """
        f = open(self.file_name, ‘rb‘)
        while True:
            try:
                obj = pickle.load(f)
                yield obj
            except EOFError:
                print(‘EOFError‘)
                f.close()
                print(f.closed)
                break

class Person:
    def __init__(self,n,a):
        self.name=n
        self.age=a
    def show(self):
        print(self.name+"_"+str(self.age) )

aa = Person("aGood", 2)
bb = Person("bGood",3)
cc = Person("cGood",4)

p = MyPickle(‘c.txt‘)
p.dump(aa)
p.dump(bb)
p.dump(cc)

iter_obj = p.loaditer()
while True:
    try:
        print(next(iter_obj).__dict__)
    except StopIteration:
        print(‘stop‘)
        break

输出结果

dump data {‘name‘: ‘aGood‘, ‘age‘: 2}
dump data {‘name‘: ‘bGood‘, ‘age‘: 3}
dump data {‘name‘: ‘cGood‘, ‘age‘: 4}
{‘name‘: ‘aGood‘, ‘age‘: 2}
{‘name‘: ‘bGood‘, ‘age‘: 3}
{‘name‘: ‘cGood‘, ‘age‘: 4}
EOFError
True
stop

  

以上是关于python--使用pickle序列化对象的主要内容,如果未能解决你的问题,请参考以下文章

python pickle

python数据持久存储:pickle模块的使用

python中的pickle模块

[转]python数据持久存储:pickle模块的基本使用

python 序列化 json pickle

python对象序列化之pickle