zoukankan      html  css  js  c++  java
  • 第三十四节,pickle数据类型转换二进制字节码模块

    在使用pickle模块时需要先 import pickle 引入模块

    pickle.dumps()模块函数

    功能:将python各种类型的数据转换成计算机识别的二进制字节码【有参】

    使用方法:pickle.dumps(要转换的数据类型变量)

    格式如:pickle.dumps(a)

    注意:计算机只能字节码,不能识别python的各种数据类型如:列表,元祖,字典等,要想在计算机保存这些python数据类型,就需要将这些数据类型转换成二进制字节码来保存

    #!/usr/bin/env python
    # -*- coding:utf8 -*-
    import pickle
    yhxxi = {   #创建一个嵌套字典
        1:{
            "yonghu":"liguixiou",
            "mima":"12345",
            "youjian":"729088188@qq.com",
            "zichan":700,
        },
        2:{
            "yonghu":"liguixiou2",
            "mima":"123452",
            "youjian":"7290881882@qq.com",
            "zichan":7002,
        }
    }
    a = pickle.dumps(yhxxi) #将字典转换成二进制字节码
    print(a)    #打印出二进制字节码
    #输出
    # b'x80x03}qx00(Kx01}qx01(Xx04x00x00x00mimaqx02Xx05x00x00x0012345qx03Xx07x00x00x00youjianqx04Xx10x00x00x00729088188@qq.comqx05Xx06x00x00x00zichanqx06Mxbcx02Xx06x00x00x00yonghuqx07X	x00x00x00liguixiouqx08uKx02}q	(hx02Xx06x00x00x00123452q
    hx04Xx11x00x00x007290881882@qq.comqx0bhx06MZx1bhx07X
    x00x00x00liguixiou2qx0cuu.'

    pickle.loads()模块函数

    功能:将二进制字节码还原成它的python数据类型【有参】

    使用方法:pickle.loads(需要还原的二进制字节码变量)

    格式如:pickle.loads(b)

    #!/usr/bin/env python
    # -*- coding:gbk -*-
    import pickle
    a = ["你好", "我好", "他好"]  #创建一个列表
    b = pickle.dumps(a)     #将列表转换成二进制字节码
    print(b)    #打印出转换的二进制字节码
    
    c = pickle.loads(b)     #将二进制字节码还原它的数据类型
    print(c)  #打印出还原的数据类型
    #输出
    # b'x80x03]qx00(Xx06x00x00x00xe4xbdxa0xe5xa5xbdqx01Xx06x00x00x00xe6x88x91xe5xa5xbdqx02Xx06x00x00x00xe4xbbx96xe5xa5xbdqx03e.'
    # ['你好', '我好', '他好']

    将一个字典转换成二进制字节码,写入本地文件,在从本地文件读出二进制字节码,还原成字典,修改字典里的某些值后,将字典转换成二进制字节码,在重新写入本地文件

    #!/usr/bin/env python
    # -*- coding:utf8 -*-
    import pickle
    """在一个本地文件里以二进制字节码方式保存会员信息"""
    yhxxi = {   #创建一个嵌套字典
        1:{
            "yonghu":"liguixiou",
            "mima":"12345",
            "youjian":"729088188@qq.com",
            "zichan":700,
        },
        2:{
            "yonghu":"liguixiou2",
            "mima":"123452",
            "youjian":"7290881882@qq.com",
            "zichan":7002,
        }
    }
    f = open("yh.txt", "wb")    #打开yh.txt文件写入模式b以字节类型打开
    f.write(pickle.dumps(yhxxi))    #将yhxxi字典通过pickle.dumps()模块函数转换成二进制字节码,写入yh.txt文件中
    print(pickle.dumps(yhxxi))  #打印出字典转换成的二进制字节码
    f.close()   #关闭打开的文件
    
    """在一个本地文件里读取里面的二进制字节码,还原它的数据类型"""
    f2 = open("yh.txt", "rb")   #打开yh.txt文件读模式b以字节类型打开
    fa = f2.read()  #读出文件里的内容
    fa2 = pickle.loads(fa)  #将文件里读出的二进制字节码还原它的数据类型
    f2.close()  #关闭打开的文件
    print(fa2)  #打印出还原的数据类型
    
    """将还原的数据类型,修改后,转换成二进制字节码再写入文件保存"""
    fa2[2]["zichan"] = fa2[2]["zichan"] - 500   #将字典里的字典,键为2里的键为zichan的值减500
    fa2[2]["yonghu"] = "liguixiou3"     #将字典里的字典,键为2里的键为yonghu的值改为liguixiou3
    print(fa2)  #此时的fa2字典里的数据已经修改
    f2 = open("yh.txt", "wb")   #打开yh.txt文件写入模式b以字节类型打开
    xieru2 = pickle.dumps(fa2)  #将修改后的字典转换成二进制字节码
    f2.write(pickle.dumps(fa2)) #将修改后的字典转换成二进制字节码,然后再写入yh.txt文件
    f2.close()  ##关闭打开的文件
    print(xieru2)   #打印将修改后的字典
    
    #最后输出
    # b'x80x03}qx00(Kx01}qx01(Xx07x00x00x00youjianqx02Xx10x00x00x00729088188@qq.comqx03Xx06x00x00x00yonghuqx04X	x00x00x00liguixiouqx05Xx06x00x00x00zichanqx06Mxbcx02Xx04x00x00x00mimaqx07Xx05x00x00x0012345qx08uKx02}q	(hx02Xx11x00x00x007290881882@qq.comq
    hx04X
    x00x00x00liguixiou2qx0bhx06MZx1bhx07Xx06x00x00x00123452qx0cuu.'
    # {1: {'youjian': '729088188@qq.com', 'yonghu': 'liguixiou', 'zichan': 700, 'mima': '12345'}, 2: {'youjian': '7290881882@qq.com', 'yonghu': 'liguixiou2', 'zichan': 7002, 'mima': '123452'}}
    # {1: {'youjian': '729088188@qq.com', 'yonghu': 'liguixiou', 'zichan': 700, 'mima': '12345'}, 2: {'youjian': '7290881882@qq.com', 'yonghu': 'liguixiou3', 'zichan': 6502, 'mima': '123452'}}
    # b'x80x03}qx00(Kx01}qx01(Xx07x00x00x00youjianqx02Xx10x00x00x00729088188@qq.comqx03Xx06x00x00x00yonghuqx04X	x00x00x00liguixiouqx05Xx06x00x00x00zichanqx06Mxbcx02Xx04x00x00x00mimaqx07Xx05x00x00x0012345qx08uKx02}q	(hx02Xx11x00x00x007290881882@qq.comq
    hx04X
    x00x00x00liguixiou3qx0bhx06Mfx19hx07Xx06x00x00x00123452qx0cuu.'

    pickle.dump()

    功能:将python数据类型以二进制字节码方式直接写入文件,【有参】

    使用方法:pickle.dump(要写入文件的类型数据变量, 打开文件变量)【有参】

    格式如:pickle.dump(a,c)

    注意:pickle.dump()写入文件可以直接写入,不需要write()函数即可写入

    #!/usr/bin/env python
    # -*- coding:utf8 -*-
    import pickle
    a = ["你好", "我好", "他好"]     #创建一个列表
    c = open("yh.txt", "wb")    #写入模式打开一个文件以二进制字节码模式
    pickle.dump(a,c)    #将python数据类型以二进制字节码方式直接写入文件
    c.close()   #关闭文件

    pickle.load()

    功能:将文件里的二进制字节码直接读出还原它的python数据类型【有参】

    使用方法:pickle.load(打开文件的变量)

    格式如:pickle.load(c1)

    注意:pickle.load()读出文件可以直接读出,不需要read()函数即可读出

    #!/usr/bin/env python
    # -*- coding:utf8 -*-
    import pickle
    c1 = open("yh.txt", "rb")   #以读二进制模式打开文件
    fa = pickle.load(c1)    #将文件里的二进制字节码直接读出还原它的python数据类型
    c1.close()  #关闭文件
    print(fa)   #打印出还原的Python数据类型
    #输出
    # ['你好', '我好', '他好']
  • 相关阅读:
    绘图QPainter-画刷
    绘图QPainter-画笔
    pyqt5-多线程QThread类
    升级时出现错误的解决办法
    打包pyinstaller
    多文档界面QMdiArea
    停靠窗口QDockWidget
    堆叠窗口QStackedWidget
    VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
    【一】ODB
  • 原文地址:https://www.cnblogs.com/adc8868/p/5790773.html
Copyright © 2011-2022 走看看