zoukankan      html  css  js  c++  java
  • 序列化模块2 pickle

    import pickle

    # dump的结果是bytes,dump用的f文件句柄需要以wb的形式打开,load所用的f是'rb'模式
    # 支持几乎所有对象的序列化
    # 对于对象的序列化需要这个对象对应的类在内存中
    # 对于多次dump/load的操作做了良好的处理

    dic = {1:(1,2,3),('a','b'):4}
    #序列化
    pic_dic = pickle.dumps(dic)
    print(pic_dic)  # bytes类型
    #反序列化
    new_dic = pickle.loads(pic_dic)
    print(new_dic)
    

    # pickle支持几乎所有对象

    class Student:
        def __init__(self,name,age):
            self.name = name
            self.age = age
    # 实例化一个对象
    ben = Student('ben',13)
    pic_ben = pickle.dumps(ben) # 序列化对象
    print(pic_ben)
    new_ben = pickle.loads(pic_ben)  #反序列化对象
    print(new_ben.name)  # 对象.属性
    print(new_ben.age)   # 对象.属性
    

    # 处理文件

    class Teacher:
        def __init__(self,name,age):
            self.name = name
            self.age = age
    # 实例化一个对象
    carl = Teacher('张三',38)
    
    with open('pic_demo','wb') as f1:
        pickle.dump(carl,f1)   # 序列化对象
    
    with open('pic_demo','rb') as f2:
        ret = pickle.load(f2) # ret是反序列化后得到的对象
        print(ret.name)  #对象调用属性 name


    # 对于多次dump/load的操作做了良好的处理

    with open('pic_demo','wb') as f1:
        pickle.dump('赵六',f1)
        pickle.dump({'k1':'vi'},f1)
        pickle.dump((1,2,3),f1)
        pickle.dump(['a','b',[1,2,('qq',1)]],f1)
    
    with open('pic_demo','rb') as f1:
        # print(pickle.load(f1))
        # print(pickle.load(f1))
        # print(pickle.load(f1))
        # print(pickle.load(f1))
        # print(pickle.load(f1))
        # print(pickle.load(f1))
        # 超出范围,报错,EOFError: Ran out of input
        #不知道里面有多少内容,用while 循环
        while True: # 异常判断
            try:
                print(pickle.load(f1))
            except EOFError:
                break
    
  • 相关阅读:
    实例属性的读取与设置
    淘宝ued
    反射发出动态类型(下)
    iOS多线程的初步研究3
    C# 自动提交到百度ping服务
    .NET自带IOC
    Entity Framework返回IEnumerable还是IQueryable?
    ASP.NET MVC4简单使用ELMAH记录系统日志
    ASP.NET基础之HttpModule学习
    【Linux】Shell学习笔记之四——文件和目录管理(硬连接和软连接)
  • 原文地址:https://www.cnblogs.com/niuli1987/p/9450670.html
Copyright © 2011-2022 走看看