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一次就可以了。
  • 相关阅读:
    我这些年的项目管理心得...
    14条建议,使你的IT职业生涯更上一层楼
    手机通过WIFI连上ZXV10 H618B路由器但不能上网问题的解决
    优秀中层必备的十大能力
    IMX51启动模式
    VS2005工程由Pocket PC 2003 SDK转为WINCE6.0 SDK的问题
    VS2005工程增加SDK
    VS2005下开发PPC2003和WM50编译器一些设置
    CTO俱乐部下午茶:技术团队管理中的那些事儿
    Android通过JNI调用驱动程序(完全解析实例)
  • 原文地址:https://www.cnblogs.com/luoahong/p/9890969.html
Copyright © 2011-2022 走看看