zoukankan      html  css  js  c++  java
  • 函数和常用模块【day06】:pickle模块(十二)

    本节内容

    1、dumps序列化和loads反序列化

    2、dump序列化和load反序列化

    3、序列函数

    1、dumps序列化和loads反序列化

    dumps()序列化

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import pickle
     
    info = {
        'name':"zhangqigao",
        "age":22,
    }
     
    with open("test.txt","wb") as f:   #以二进制的形式写入
        data = pickle.dumps(info)   #序列化成字符串
        f.write(data)   #写入test.txt 文件中
     
    #输出到test.txt文件中的内容
    �}q (X   ageqKX   nameqX
       zhangqigaoqu.

    loads()反序列化

    1
    2
    3
    4
    5
    6
    7
    8
    9
    import pickle
     
    with open("test.txt","rb") as f: #以二进制的模式读
        data = pickle.loads(f.read())   #反序列化操作
     
    print(data.get("age"))
     
    #输出
    22

    2、dump序列化和load反序列化

    dump()序列化

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import pickle
     
    info = {
        'name':"zhangqigao",
        "age":22,
    }
     
    with open("test.txt","wb") as f:
        pickle.dump(info,f)  #序列化
     
    #输出
    �}q (X   ageqKX   nameqX
       zhangqigaoqu.

    load()反序列化

    1
    2
    3
    4
    5
    6
    7
    8
    9
    import pickle
     
    with open("test.txt","rb") as f:
        data = pickle.load(f)  #反序列化成内存对象
     
    print(data.get("age"))
     
    #输出
    22

    从上面的结果观察,json和pickle好像也没什么区别?但是别忘了,我们说,json只能序列化简单的数据类型,而pickle可以序列化python中所有的数据类型,包括函数、类等,下面我们就来看看,如何序列化函数的。还有就是,pickle序列化的是字节,而json序列化的是字符,这个要注意一下。

    3、序列化函数

    ①序列化

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    import pickle
     
    def sayhi(name):   #函数
        print("hello:",name)
     
    info = {
        'name':"zhangqigao",
        "age":22,
        "func":sayhi    #"func"对应的值sayhi,是函数名
    }
     
    with open("test.txt","wb") as f:
        data = pickle.dumps(info)
        f.write(data)
     
    #输出test.txt
    �}q (X   funcqc__main__
    sayhi
    qX   ageqKX   nameqX
       zhangqigaoqu.

    ②反序列化

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import pickle
     
    def sayhi(name):   #在反序列化中必须写上此函数,不然会报错,因为在加载的时候,函数没有加载到内存
        print("hello:",name)
     
    with open("test.txt","rb") as f:
        data = pickle.loads(f.read())
     
    print(data.get("age"))
     
    data.get("func")("zhangqigao")  #执行函数sayhi
     
    #输出
    22
    hello: zhangqigao   #输出的函数体中的逻辑也是可以变的,这边我就不做演示了

     小结:

    1. json值支持简单的数据类型,pickle支持所有的数据类型。
    2. pickle只能支持python本身的序列化和反序列化,不能用作和其他语言做数据交互,而json可以。
    3. pickle序列化的是整个的数据对象,所以反序列化函数时,函数体中的逻辑变了,是跟着心的函数体走的。
    4. pickle和json在3.0中只能dump一次和load一次,在2.7里面可以dump多次,load多次,anyway,以后只记住,只需要dump一次,load一次就可以了。
  • 相关阅读:
    自解代理模式
    顺时针打印二维方阵
    Dom4j官网解释实例
    Eclipse快捷键大全
    MyEclipse快捷键大全
    SQL语句的增删改查(详细)
    MySQL用户权限详细汇总
    从表中随机返回n条记录
    证件照(1寸2寸)拍摄处理知识汇总
    java 实现文件内容的加密和解密
  • 原文地址:https://www.cnblogs.com/luoahong/p/9890969.html
Copyright © 2011-2022 走看看