Python 之 cPickle用法

article/2025/11/2 17:11:11

欢迎大家扫码关注我的微信公众号:
数据之恋

Python 之 cPickle 用法 - 目录

  • 一、概述
  • 二、序列化与反序列化的几个常用方法
    • 2.1 dump() 与 load()
    • 2.2 dumps() 与 loads()
    • 2.3 带 s 与不带 s 的区别
  • 三、cPickle 类的孪生—— pickle

一、概述

序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

个人理解序列化就是通过特殊的方法将数据存储到相应存储区的过程, 反序列化就是依据数据序列化时的规则进行反向执行, 以取出原数据的过程。

Java 中有序列化与反序列化的操作, 在 Python 中可以进行同样的操作。使用 Python 进行对象的序列化与反序列化操作时, 我们不用考虑其中的细节, 因为 Python 已经帮我们封装好了相关的类, 也就是这篇博文的主角——cPickle。

二、序列化与反序列化的几个常用方法

我们使用 cPickle 类会经常使用到四个方法: dump()、 load()、 dumps()、 loads()。

2.1 dump() 与 load()

>>> # 创建需要被操作的数据并输出:
>>> data = [{'key': 'value'}, ['a list in an other list'], 'a str', 888]
>>> print data
[{'key': 'value'}, ['a list in an other list'], 'a str', 888]
>>> # 以二进制写的方式打开一个文件, 并赋给一个变量 write_file:
>>> write_file = open('./MyWorkPlace/test.pkl', 'w+')
>>> # 使用 dump() 方法将数据序列化到上一步打开的文件中:
>>> cPickle.dump(data, write_file)
>>> # 关闭文件
>>> write_file.close()
>>> # 以二进制读的方式打开序列化数据后的文件, 并赋给变量 read_file:
>>> read_file = open('./MyWorkPlace/test.pkl', 'r+')
>>> # 使用 load() 方法将该文件中的数据反序列化后输出:
>>> print cPickle.load(read_file)  # 可以看到输出来的数据与我们序列化至文件前的数据完全一样
[{'key': 'value'}, ['a list in an other list'], 'a str', 888]
>>> read_file.close()
>>>

2.2 dumps() 与 loads()

>>> # 使用 2.1 中的数据 data 通过 dumps() 进行序列化:
>>> dumps_content= cPickle.dumps(data)
>>> # 查看序列化后的数据的类型:
>>> print type(dumps_content)
<type 'str'>
>>> # 打印出序列化后的数据: (此时的数据与 2.1 中序列化至文件中的数据一样)
>>> print dumps_content
(lp1
(dp2
S'key'
p3
S'value'
p4
sa(lp5
S'a list in an other list'
p6
aaS'a str'
p7
aI888
a.
>>> # 使用 loads() 方法, 将刚才序列化后的数据进行反序列化:
>>> loads_content = cPickle.loads(dumps_content)
>>> # 查看 loads_content 类型:
>>> print type(loads_content)
<type 'list'>
>>> # 将 loads_content 输出:
>>> print loads_content  # 我们会发现, 其与序列化之前的数据(data)在类型与数据上完全一样
[{'key': 'value'}, ['a list in an other list'], 'a str', 888]
>>>

2.3 带 s 与不带 s 的区别

常用的 cPickle 类中的四个方法我们分成了两组进行其功能的展示, 但是带 s 与不带 s 的有什么区别呢?

  1. 不带 s 的两个(即 dump() 和 load())方法会将数据序列化后保存至文件中, 然后再从文件中取出并反序列化后备用;
  2. 带 s 的两个(即 dumps() 和 loads())方法则会将数据序列化后以字符串的格式保存在内存中, 然后再将字符串格式的数据反序列化后备用;

二者各自利弊, 就不在此赘述。

三、cPickle 类的孪生—— pickle

其实, 在 Python 中还有一个与 cPickle 功能基本相同的类——pickle。 二者的功能几乎完全一致, 其中最大的区别是: cPickle 是用 C 语言编写的类, 执行速度上传说中比 pickle 要快 1000 倍(本人没有试过, 有兴趣的小伙伴可以自行测试一下)。

pickle 模块使用的数据格式是 Python 专用的, 且不向后兼容, 由于是 Python 专用的数据格式, 所以其他语言也不能识别。 但是我们可以使用 Python 的 Json 包将数据转化为其他语言可以识别使用的格式。

我们可以这样理解, cPickle 与 pickle 包对于 Python 对象数据的序列化与反序列化的操作与接口完全一样(不一样的部分我们很少能使用到), 但是速度上 cPickle 却要比 pickle 快出很多倍, 所以推荐大家在需要的时候使用 cPickle 进行数据的序列化与反序列化。


http://chatgpt.dhexx.cn/article/G5f0hOpP.shtml

相关文章

HDU 2509 Nim博弈变形

&#xff11;、HDU 2509   &#xff12;、题意&#xff1a;n堆苹果&#xff0c;两个人轮流&#xff0c;每次从一堆中取连续的多个&#xff0c;至少取一个&#xff0c;最后取光者败。 &#xff13;、总结&#xff1a;Nim博弈的变形&#xff0c;还是不知道怎么分析&#xff0c;…

LibreOJ #2509.「HNOI2018」排列 贪心+堆

题意 n<500000 分析 不难分析到其实就是有一棵树&#xff0c;然后每次要选一个节点。在选某个节点时必须先选其父节点&#xff0c;第i个选的节点的系数为i&#xff0c;问最大的权值和。 先这么想&#xff0c;对于一个最权值小的节点&#xff0c;当我们选了其父亲后&#…

hdu2509 Be the Winner (反尼姆博弈 )

hdu2509 Be the Winner Problem Description Let’s consider m apples divided into n groups. Each group contains no more than 100 apples, arranged in a line. You can take any number of consecutive apples at one time. For example “” can be turned into “” …

本地win10安装的MySQL8.0.12用navicat12报错 2509 -Authentication plugin ' caching_sha2_password' cannot be :

本地安装了MySQL8.0.12用navicatl 12报错了&#xff0c;报错请款如下: 网上很多的方法都是说在my.ini 文件中添加 default_authentication_pluginmysql_native_password&#xff1b; 我知道有的人的是可以的&#xff0c;但是我的报错 然后有需要修改my.ini文件 最后一行加上…

学习MySQL的第二天,安装MySQL的远程连接工具与解决2509的报错

1&#xff0c;下载并安装MySQL的远程连接工具 安装MySQL远程连接工具结果都一样哈&#xff0c;都是为了方便快捷&#xff0c;点击下方连接从“sqlyogcommunity官网”来下载安装。 https://github.com/webyog/sqlyog-community/wiki/Downloads 下载完后就可以来安装了&#xff…

nivicat破解包安装以及问题解决。MySQL安装版本Navicat连接报错2509解决方案

nivicat安装步骤 https://blog.csdn.net/yhflyl/article/details/95779920。 安装之后出现两个问题&#xff1a; 如图所示&#xff1a;网上查询过后&#xff0c;发现这个错误出现的原因是在mysql8之前的版本中加密规则为mysql_native_password&#xff0c;而在mysql8以后的加…

MySQL安装版本Navicat连接报错2509解决方案

MySQL安装版本Navicat连接报错2509解决方案 【问题产生】 新安装后打开数据库连接报错 【产生原因】 由于新版本的MySQL新特性导致的。 mysql> select Host,User,plugin from mysql.user; ------------------------------------------------- | Host | User | plugin | --…

Windows无法连接到Group Policy Client服务

Citrix XenApp服务器通过PVS启动后&#xff0c;用户访问出现如下的报错&#xff1a; 此报错是由于该Windows服务器的 Group Policy服务没有启动导致的&#xff0c;可以直接登录到该服务器开启Group Policy的服务即可。 但是如果你有好多好多的服务器&#xff0c;你也不知道哪个…

Circumventing Group Policy Settings

Group policy settings are an integral part of any Windows-based IT environment. If you’re a network administrator you use them to enforce corporate security and desktop management policy, and if you’re a user you’ve almost certainly been frustrated by t…

GPP(Group Policy Preferences)策略组首选项漏洞

概念 组策略是配配置计算机中某一些用户组策略的程序 SYSVOL是AD(活动目录)里面一个存储域公共文件服务器副本的共享文件夹&#xff0c;所有域内主机都能访问&#xff0c;里面保存组策略相关数据&#xff0c;包含登录脚本配置文件等 dir /s /a \\域控IP\SYSVOL\*.xml GPO是组策…

Group Policy Client解决方法

最近我同学的电脑遇到了这样的一个问题&#xff1a; 在开机登录界面时无法进入&#xff0c;提示Group Policy Client服务未能登录 其实在开始我也没遇到这样的问题&#xff0c;上网查了很久的资料&#xff0c;最后终于让我给解决了&#xff0c;呵呵…… 现在我就把我的解决方…

windows无法连接到group policy client服务.此问题阻止标准用户登陆系统.

问题描述如图&#xff1a; 解决&#xff1a; 1.winR 输入 regedit,打开注册表编辑器 2.对上图区域右键->权限 3.选定你的用户&#xff0c;点添加->高级->立即查找 4.找到SYSTEM&#xff0c;点击确定 5.然后注册框中出现&#xff0c;点确定&#xff0c;然后重启&#…

Powershell如何修改组策略(group policy)

上一篇&#xff0c;田总手把手给指导了如何实现多跳&#xff0c;手动实现的&#xff0c;没有问题。但是机器众多&#xff0c;这一篇我们用命令来实现组策略的修改。 首先&#xff0c;Powershell不是万能的&#xff0c;Powershell是可以获取到域的组策略(GPO)&#xff0c;并且权…

计算机 服务未能登陆,w7电脑开机提示Group Policy Client服务未能登陆的修复方法...

‍ ‍ w7系统是目前比较多用户自己使用的系统&#xff0c;比较普遍&#xff0c;但是出现的故障也比较多&#xff0c;一般都是大家能自己动手解决的。那么w7电脑开机提示Group Policy Client服务未能登陆怎么回事&#xff1f;要怎么处理这个问题&#xff1f;下面小编就以w732位旗…

win7服务器未能登录怎么解决,win7开机提示group policy client服务未能登录拒绝访问怎么办...

‍‍ 有些win7专业版用户在电脑开机的时候提示group policy client服务未能登录拒绝访问&#xff0c;导致无法进入系统开不了机&#xff0c;遇到这种情况该怎么办呢&#xff1f;group policy client服务用于应用由这台计算机的管理员或者其他用户通过组策略组件配置的设置&…

计算机服务 访问拒绝,Win7开机提示group policy client服务未能登录,拒绝访问的解决方法...

我们在使用电脑的过程中&#xff0c;经常会遇到一些小问题&#xff0c;尤其是电脑开机之后的问题最为常见。近期有一位用户遇到电脑开机提示“group policy client服务未能登录,拒绝访问”。那么我们要如何解决这个问题呢&#xff1f;下面装机之家分享一下Win7开机提示group po…

故障:ID1085 的 GroupPolicy 警告日志

1、故障现象: 1)Windows Server 2008 with SP2 的域控制器上,每隔 5 分钟,在 System Log 中出现 ID1085 的 GroupPolicy 警告日志: 2)同时,在 Application Log 中出现 ID8194 的 Group Policy Services 错误日志: 2、故障处理: 1)删除文件夹: C:\ProgramData\Appl…

使用Windows10 group policy关闭Virtualization Security

执行命令msinfo32: 查看system info&#xff0c;发现Virtualization-based security处于running状态&#xff1a; 执行命令行gpedit&#xff0c;打开group policy&#xff1a; 沿下列路径展开&#xff1a; Local Computer Policy > Computer Configuration > Administr…

win10服务器未能登录怎么办,win10系统开机提示Group policy Client服务未能登陆的解决技巧...

有越来越多的用户喜欢win10系统了。在日常的安装和使用过程中&#xff0c;免不了总能碰见win10系统开机提示Group policy Client服务未能登陆的问题。面对突然出现的win10系统开机提示Group policy Client服务未能登陆的问题&#xff0c;对于一些仅仅将电脑作为工具使用的菜鸟来…

Managing Group Policy with PowerShell

Overview In this article, I’ll talk about your options when it comes to managing Group Policy using PowerShell. To be sure, depending upon your needs, Group Policy is nearly a full citizen in the world of PowerShell-based management. I’ll talk about why …