码迷,mamicode.com
首页 > 编程语言 > 详细

python--使用pickle序列化对象

时间:2018-06-22 13:47:26      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:实例   closed   透明   过程   unp   init   imp   字符   文件   

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序列化对象

标签:实例   closed   透明   过程   unp   init   imp   字符   文件   

原文地址:https://www.cnblogs.com/xiao-apple36/p/9212264.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!