• 【pickle】详解python中的pickle模块(常用函数、示例)


    1、序列化、反序列化介绍

    序列化:把对象转换为字节序列的过程称为对象的序列化。

    反序列化:把字节序列恢复为对象的过程称为对象的反序列化。

    2、pickle模块说明

    python中的pickle模块实现了基本的数据序列化和反序列化。

    通过pickle模块的序列化操作能够将程序中运行的对象信息保存到文件中去,永久存储;通过pickle模块的反序列化操作,能够从文件中创建上一次程序保存的对象。

    pickle模块使用的数据格式是python专用的,能够把python对象直接保存到文件,而不需要转化为字符串,也不用底层的文件访问操作把它们写入到一个二进制文件中。

    3、pickle模块常用函数

    (1)pickle.dump(obj, file, [,protocol])

    函数的功能:将obj对象序列化存入已经打开的file中。

    参数:

    obj:想要序列化的obj对象。

    file:文件名称。

    protocol:序列化使用的协议。如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。

    1. #!/usr/bin/env python
    2. # -*- coding:utf-8 -*-
    3. import pickle
    4. # 将test对象序列化到文件中
    5. def dump_test_data():
    6. test = [1, 2, 3]
    7. with open("test.pickle", "wb") as file:
    8. pickle.dump(test, file)

    (2)pickle.load(file)

    函数的功能:将file中的对象序列化读出。

    参数:

    file:文件名称。

    1. #!/usr/bin/env python
    2. # -*- coding:utf-8 -*-
    3. import pickle
    4. # 将文件中test对象序列化读出
    5. def load_test_data():
    6. with open("test.pickle", "rb") as file:
    7. test = pickle.load(file)
    8. return test

    (3)pickle.dumps(obj[, protocol])

    函数的功能:将obj对象序列化为string形式,而不是存入文件中。

    参数:

    obj:想要序列化的obj对象。

    protocal:如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。

    1. #!/usr/bin/env python
    2. # -*- coding:utf-8 -*-
    3. import pickle
    4. # 将test对象序列化为字符串形式
    5. def dumps_test_data():
    6. test = [1, 2, 3]
    7. # dumps 将数据通过特殊的形式转换为仅python语言识别的字符串
    8. str_test = pickle.dumps(test)
    9. print(str_test)

    (4)pickle.loads(string)

    函数的功能:从string中读出序列化前的obj对象。

    参数:

    string:文件名称。

    1. #!/usr/bin/env python
    2. # -*- coding:utf-8 -*-
    3. import pickle
    4. # 从string中读出序列化前的对象
    5. def loads_test_data():
    6. test = [1, 2, 3]
    7. str_test = pickle.dumps(test)
    8. # loads 将pickle数据转化为python的数据结构
    9. loads_test = pickle.loads(str_test)
    10. print(loads_test)

  • 相关阅读:
    Ubuntu 17.10的超震撼声音权限
    maven工程使用sonar扫描代码
    助力质量生产,基于目标检测模型MobileNetV2-YOLOv3-Lite实现PCB电路板缺陷检测
    Leetcode刷题Day2----数组
    南大通用数据库-Gbase-8a-学习-19-Gbase8a从Kafka订阅Topic消费数据
    Vue——模板引用(不建议使用,了解)
    18.1 Socket 原生套接字抓包
    冠状病毒疾病优化算法 (COVIDOA)附matlab代码
    Lambda 表达式
    K8s(kubernetes)介绍以及原理解析
  • 原文地址:https://blog.csdn.net/kevinjin2011/article/details/125525373