• 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
    

      

  • 相关阅读:
    【转】c++ http下载文件
    unity事件
    【Unity3D自学记录】判断物体是否在镜头内
    Unity3D研究院之获取摄像机的视口区域
    Unity3D特效-场景淡入淡出
    Unity3D深入浅出
    胶囊碰撞体(CapsuleCollider)
    unity Dotween插件的简单介绍及示例代码
    使用Animation实现摄像机动画
    Unity3D研究院之使用Animation编辑器编辑动画
  • 原文地址:https://www.cnblogs.com/xiao-apple36/p/9212264.html
Copyright © 2020-2023  润新知