zoukankan      html  css  js  c++  java
  • Python文件读写之pickle模块的应用

    使用pickle库对list、tuple、dict、set数据类型进行文件读写:

    文件数据类型除了字符串可以用文本读写的方式操作外,还有其他的数据类型。例如:list、tuple、dict、set等。在处理这些数据时我们不能按字符串的文本处理方式,而是按照二进制的读取方式。

    另外,write()方法此时已不适用,这里需要用到标准模块pickle模块(数据持久性模块,可打包序列数据类型)dump()和load()方法进行读写操作。

    代码如下:

    #Authors:xiaobei
    
    import pickle
    
    Listdata = [1010,"xiaobei",(1,2)]
    Tupledata = tuple(Listdata)
    Dictdata = {"1":"A","2":"B"}
    Setdata = set(Listdata)
    list1 = [Listdata,Tupledata,Dictdata,Setdata]
    
    path = r"C:UsersAdministratorDesktoplist.txt"
    
    #这里一定是以二进制方式进行读写:wb,rb
    with open(path,"wb") as fi:
        pickle.dump(list1,fi)	#序列化(转储)
    with open(path,"rb") as fo:
        List = pickle.load(fo)	#反序列化(加载)
        for data in List:
            print(data,end = "	{}
    ".format(type(data)))

    输出结果:

    [1010, 'xiaobei', (1, 2)] <class 'list'>
    (1010, 'xiaobei', (1, 2)) <class 'tuple'>
    {'1': 'A', '2': 'B'} <class 'dict'>
    {(1, 2), 1010, 'xiaobei'} <class 'set'>

    文件中数据的状态:

    €]q (]q(M?X xiaobeiqKK唓eM?hh噏}q(X 1qX AqX 2qX Bq ucbuiltins
    set
    q
    ]q (hM?he卶 Rq
    e.

    这是一堆乱码,当然这是以二进制方式存储在文本文件中的,文本方式打开看到一堆乱码也很正常,但是python可以理解它。

    下面我们介绍pickle模块:

    pickle模块有两种功能:序列化和反序列化,除了上述dump()和load()外,还有dumps()和loads()。

    其中,dumps()与dump()区别是,dumps()不将对象写入文件,而是直接返回一个序列化的bytes对象。loads()与load()的区别是loads()不从文件中读取,而直接从序列化的bytes对象中读取信息。

    pickle一词在英文中有 “泡菜” 之意,这里可以理解为 “腌制” 序列化数据。

    然而,序列化和反序列化的模块不只pickle一个,还有json等。那么,序列化和反序列化到低有什么用呢?

    1. 便于存储。序列化过程将文本信息转变为二进制数据流。这样就信息就容易存储在硬盘之中,当需要读取文件的时候,从硬盘中读取数据,然后再将其反序列化便可以得到原始的数据。在Python程序运行中得到了一些字符串、列表、字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据。python模块大全中的pickle模块就派上用场了,它可以将对象转换为一种可以存储的格式。

    2. 便于传输。当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把這个对象转换为字节序列(序列化)才能在网络上传输;接收方则需要把字节序列在恢复为对象(反序列化)。

  • 相关阅读:
    移动互联网广告
    移动互联网广告
    移动互联网广告
    移动互联网广告
    移动互联网广告
    移动互联网广告
    vue2.0 transition -- demo实践填坑
    纯CSS3制作皮卡丘动画壁纸
    纯CSS3制作卡通场景汽车动画效果
    18种CSS3loading效果完整版
  • 原文地址:https://www.cnblogs.com/slz99/p/12527750.html
Copyright © 2011-2022 走看看