zoukankan      html  css  js  c++  java
  • python基础_序列化模块pickle

    1.定义

    序列化  : 把不能够直接存储在文件中的数据变得可存储,这个过程就是序列化
    反序列化: 把文件的数据内容拿出来,恢复成原来的数据类型,这个过程就是反序列化.

    2.实际案例的使用dumps和loads

    import pickle
    
    # ### (1)dumps 和 loads
    #dumps 把任意对象序列化成一个bytes
    lst = [1,2,3]
    res = pickle.dumps(lst)
    print(res)
     
    #loads 把任意bytes反序列化成原来数据
    lst = pickle.loads(res)
    print(lst,type(lst))

    3.实际案例dump和load

    # ### (2)dump 和 load
    
    #dump  把对象序列化后写入到file-like Object(即文件对象) (如果配合文件操作 推荐使用dump和load)
    with open("ceshi2.txt",mode="wb") as fp:
        setvar = {"a",1,"b"}
        # dump 相当于先dumps 变成字节流,再用write写入字节流;将两部操作合并成一步是dump
        # dump(要序列化的数据,文件对象)
        pickle.dump(setvar,fp)
    
    #load  把file-like Object(即文件对象)中的内容拿出来,反序列化成原来数据
    with open("ceshi2.txt",mode="rb") as fp:
        # 首先把文件内容读出来,然后进行反序列化,将两部操作合并成一步
        res = pickle.load(fp)
    
    print(res,type(res))

    4.dumps和dump区别对比

    # dumps 和 loads 配合文件操作使用
    with open("ceshi3.txt",mode="wb") as fp:
        dic = {"xb":"比较喜欢晒女友","zh":"喜欢睡觉"}
        res = pickle.dumps(dic)
        fp.write(res)
    
    with open("ceshi3.txt",mode="rb") as fp:
        res = fp.read()
        dic = pickle.loads(res)
    print(dic,type(dic))

     5,连续dump和load的操作

    # (2)pickle
    print("<===>")
    import pickle
    """
    可以连续dump ,也可以连续load
    """
    dic1 = {"a":1,"b":2}
    dic2 = {"c":3,"d":4}
    with open("ceshi3.pkl",mode="wb") as fp:
        pickle.dump(dic1,fp)
        pickle.dump(dic2,fp)
        
    # 方法一
    with open("ceshi3.pkl",mode="rb") as fp:
        dic1 = pickle.load(fp)
        dic2 = pickle.load(fp)
        
    print(dic1,type(dic1))
    print(dic2,type(dic2))
    
    # 方法二
    try:
        with open("ceshi3.pkl",mode="rb") as fp:
            while True:
                dic = pickle.load(fp)
                print(dic)
    except:
        pass

    6,json数据连续dump和load的操作

    # (1)json
    """
    可以连续dump , 不可以连续load
    load 特征是一次性把所有的内容都取出来变成一个完整的字典;
    所以如果是多个字典不能够转化; 
    
    # 解决方式:
    loads 可以 配合遍历文件对象,一行一行读取内容,在通过loads来转换成原来的数据类型
    """
    dic1 = {"a":1,"b":2}
    dic2 = {"c":3,"d":4}
    with open("ceshi2.json",mode="w",encoding="utf-8") as fp:
        json.dump(dic1,fp)
        fp.write("
    ")
        json.dump(dic2,fp)
        fp.write("
    ")
        
    # 文件对象是迭代器,可以遍历;
    from collections import Iterator,Iterable
    res = isinstance(fp,Iterator)
    print(res)
    
    # 用loads 来解决load存在的弊端;
    with open("ceshi2.json",mode="r",encoding="utf-8") as fp:
        for i in fp:
            # print(i,type(i))
            dic = json.loads(i)
            print(dic,type(dic))
  • 相关阅读:
    MySQL实战45讲学习笔记:第二十四讲
    MySQL实战45讲学习笔记:第二十六讲
    MySQL实战45讲学习笔记:第二十三讲
    MySQL实战45讲学习笔记:第二十一讲
    MySQL实战45讲学习笔记:第二十二讲
    MySQL实战45讲学习笔记:第十七讲
    MySQL实战45讲学习笔记:第十四讲
    MySQL实战45讲学习笔记:第十三讲
    Web协议详解与抓包实战:HTTP1协议-内容协商是怎样进行的(8)
    Web协议详解与抓包实战:HTTP1协议-请求与响应的上下文(7)
  • 原文地址:https://www.cnblogs.com/jalen-123/p/13173749.html
Copyright © 2011-2022 走看看