IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 有关pickle模块------初识者必须知道的6点 -> 正文阅读

[Python知识库]有关pickle模块------初识者必须知道的6点



1.pickle相关的灵魂拷问,who、why??

(1). who it is?

  • pickle模块只能在Python中使用,python中几乎所有的数据类型(列表,字典,集合,类等)都可以用pickle来序列化
  • pickle序列化后的数据,可读性差,人一般无法识别
  • 持久化存储, 可以将对象以文件的形式存放在磁盘上
  • 可以将文件保存任何格式,但是一般使用pkl,pickle,p、data等格式。你自创一个扩展名,例如【.alien】也可以

(2). why is it ?

  • 当你想保存对象、字典的时候,ini格式、xml格式等配置文件都无法直接实现,需要再次解析一下。但pickle就可以直接解析了
  • 当你想保存二进制文件的时候,pickle也能排上用场
  • Pickle 是可移植的,不同操作系统,无论是mac、windows、linux都可以读取pickle文件


2.pickle如何使用,how to use ?



(1)序列化操作对象-------保存到文件

序列化对象----------------并将结果数据流写入到文件对象中。


with open("test_pickle.pkl", "wb") as f:
    # 序列化,将对象写到文件
    pickle.dump(obj, f, protocol=0)



def dump(obj, file, protocol=None):
    Pickler(file, protocol).dump(obj)


class Pickler:

    def __init__(self, file, protocol=None):
        """This takes a file-like object for writing a pickle data stream.

        The optional protocol argument tells the pickler to use the
        given protocol; supported protocols are 0, 1, 2.  The default
        protocol is 0, to be backwards compatible.  (Protocol 0 is the
        only protocol that can be written to a file opened in text
        mode and read back successfully.  When using a protocol higher
        than 0, make sure the file is opened in binary mode, both when
        pickling and unpickling.)

        Protocol 1 is more efficient than protocol 0; protocol 2 is
        more efficient than protocol 1.

  • 序列化模式(protocol)支持[0, 1, 2]三个选项,数值越大效率越高,也代表压缩的越厉害。
  • 默认是0, 基本能看出来保存的对象和列表信息,但是如果选择1、或2,基本就是乱码了,说明压缩比很高
  • 后续有截图,不同压缩比看到的效果


(2)反序列化操作-------解析pickle的文件

反序列化操作--------------------将数据从文件中解析出来的过程


with open("test_pickle.pkl", "rb") as f:
     obj = pickle.load(f)



3.序列化----类(Class)时候的代码


import pickle


class Person(object):

    def __init__(self, name, age, blog):
        self.name = name
        self.age = age
        self.blog = blog


def do_serializing(file):
    per = Person("alien", 18, "https://blog.csdn.net/chenmozhe22")
    with open(file, "wb") as f:
        pickle.dump(per, f, protocol=0)


def do_unserializing(file):
    with open(file, "rb") as f:
        obj = pickle.load(f)
        print("obj type==========>{}".format(type(obj)))
        print("obj value==========>{},{},{}".format(obj.name, obj.age, obj.blog))


if __name__ == "__main__":
    file_path = r'F:\MyProjects\XXXXX\TestCase\pickle_file.obj'
    do_serializing(file_path)
    do_unserializing(file_path)


# 打印如下:

obj type==========><class '__main__.Person'>
obj value==========>alien,18,https://blog.csdn.net/chenmozhe22



4.序列化模式(protoco)不同值的效果


protocol=0时候压缩效果:
在这里插入图片描述



protocol=1时候压缩效果:在这里插入图片描述



5.序列化----列表(list)时候的代码


import pickle


def do_serializing(file):
    info_list = ["alien", 18, "https://blog.csdn.net/chenmozhe22"]
    with open(file, "wb") as f:
        pickle.dump(info_list, f, protocol=0)


def do_unserializing(file):
    with open(file, "rb") as f:
        obj = pickle.load(f)
        print("obj type==========>{}".format(type(obj)))
        print("obj value==========>{},{},{}".format(obj[0], obj[1], obj[2]))


if __name__ == "__main__":
    file_path = r'F:\MyProjects\FT_AutoTestDemo\TestCase\pickle_file.pkl'
    do_serializing(file_path)
    do_unserializing(file_path)


# 打印如下:

obj type==========><type 'list'>
obj value==========>alien,18,https://blog.csdn.net/chenmozhe22


序列化效果如下:
在这里插入图片描述



6.解码问题----中文、python2&python3不兼容等情况


def do_unserializing(file):
    with open(file, "rb") as f:
        obj = pickle.load(f, encoding='iso-8859-1')					# 可添加不同的解码试试





创作不易,欢迎一键三连支持!!!



延伸阅读:
《python3中配置文件ini的使用详解----读写、list&dict&path等变量----configparser》
《Python3中打开文件的方式(With open)》

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-24 10:31:00  更:2021-09-24 10:33:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 16:31:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码