Python中cPickle模块的使用详解与序列化操作

小石头
小石头
发布时间:2026-10-13| 4人浏览过
原创

本文详解Python中cPickle模块的使用方法,涵盖dump、load、dumps和loads四个核心函数的具体应用。通过对比pickle与cPickle的性能差异,展示如何将Python对象序列化为文件或字符串,实现数据的持久化存储与快速恢复,适用于需要高效处理Python对象序列化的场景。

在Python中,通常使用pickle类来实现Python对象的序列化,而cPickle提供了一个更高效且简洁的接口。正如Python官方文档所述:“cPickle – A faster pickle”,它旨在提升序列化的速度。

cPickle支持对任意类型的Python对象进行序列化操作,例如列表(list)、字典(dict)乃至自定义类的实例等。所谓序列化,即是将对象转换为可存储或传输的格式,以便完整保存并在需要时完全可逆地恢复其原始状态。在cPickle模块中,主要包含四个函数用于执行这一过程,下文将通过示例逐一介绍。

1. dump:将Python对象序列化并保存至本地文件。

import cPickle
 data = range(1000)
 cPickle.dump(data,open("test\\data.pkl","wb"))

dump函数需要接收两个参数:第一个参数为待序列化的Python对象名称,第二个参数为本地文件路径。需要注意的是,在调用dump之前,必须使用open函数打开一个文件,并指定“写”模式(如'wb')。

2. load:从本地文件载入数据,恢复Python对象。

data = cPickle.load(open("test\\data.pkl","rb")) 

与dump类似,使用load函数时,需先用open函数打开本地文件,并指定“读”模式(如'rb'),以便读取序列化后的数据并还原对象。

3. dumps:将Python对象序列化并保存至字符串变量中。

data_string = cPickle.dumps(data)

4. loads:从字符串变量中载入数据,恢复Python对象。

data = cPickle.loads(data_string)

5. pickle模块使用的数据格式是Python专用的,不同版本之间不向后兼容,且其他编程语言无法直接识别。若需与其他语言进行数据交互,建议使用内置的json包。

使用pickle模块,你可以直接将Python对象保存到文件中,无需将其转换为字符串,也无需手动处理底层文件访问操作以写入二进制文件。pickle模块会创建一种Python专用的二进制格式,你几乎无需关注文件细节,它会自动完成对象的读写操作,唯一需要的只是一个合法的文件句柄。

pickle模块中的两个主要函数是dump()和load()。dump()函数接受一个文件句柄和一个数据对象作为参数,将数据对象以特定格式保存到指定文件中。当使用load()函数从文件中读取已保存的对象时,pickle模块会自动识别并将其恢复为原始的Python对象格式。

  • dumps()函数执行与dump()相同的序列化操作。不同之处在于,它不接受流对象,也不将序列化后的数据保存到磁盘文件,而是直接返回序列化后的数据字符串。
  • loads()函数执行与load()相同的反序列化操作。它不接受流对象,也不从文件中读取序列化数据,而是接收包含序列化数据的字符串对象,并直接返回恢复后的Python对象。

cPickle是pickle模块的一个由C语言编译而成的更快版本,旨在提供更高的性能。

pickle和cPickle的功能相当于Java中的序列化和反序列化操作,用于对象状态的保存与恢复。

#! /usr/local/env python
# -*- coding=utf-8 -*-

if __name__ == "__main__":
  import cPickle

#序列化到文件
obj = 123,"abcdedf",["ac",123],{"key":"value","key1":"value1"}
print obj
#输出:(123, 'abcdedf', ['ac', 123], {'key1': 'value1', 'key': 'value'})
#r+ 读写权限 r+b 读写到二进制文件
f = open(r"d:\a.txt","r+")
cPickle.dump(obj,f)
f.close()
f = open(r"d:\a.txt")
print cPickle.load(f)
#输出:(123, 'abcdedf', ['ac', 123], {'key1': 'value1', 'key': 'value'})

#序列化到内存(字符串格式保存),然后对象可以以任何方式处理如通过网络传输
obj1 = cPickle.dumps(obj)
print type(obj1)
#输出:<type 'str'>
print obj1
#输出:python专用的存储格式
obj2 = cPickle.loads(obj1)
print type(obj2)
#输出:<type 'tuple'>
print obj2
#输出:(123, 'abcdedf', ['ac', 123], {'key1': 'value1', 'key': 'value'})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。