cpickle支持的python版本_Python序列化模块pickle和cPickle

Python的序列化是指把变量从内存中变为可以储存/传输的数据/文件的过程. 在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。

在Python中最基础的实现序列化的两个模块是cPickle和pickle模块, 功能基本一样, 前者是C写的更快, 后者是python写的会慢点. 一般优先使用cPickle. 这里只介绍cPickle, 一般用其四个函数(dump、dumps、dump、loads)也就OK了, pickle包含了类和另外一些内容, 更多细节可以看官方手册。一般引用时我们会做如下引用:

try:

import cPickle as pickle

except ImportError:

import pickle

一、导出数据 和 导入数据

1、导出数据

dump 导出数据(序列化)主要有两个函数:

dump(data,file_handle[, protocol]) : 将数据序列化到文件.

dumps(data[, protocol]) : 将数据序列化成字符串.

protocol是数据流处理策略:

0: ascii串保存, 默认形式, 方便人读取

1: 旧式兼容性较强2进制形式

2: 支持新式类的2进制模式,Python2.3开始引入.

2、导入数据

load 载入数据(反序列化)主要有两个函数:

load(file) : 将序列化数据从文件读入返回数据.

loads(string) : 将字符串的序列化数据读入并返回数据.

二、示例

1、写入文件及读取

#!/usr/bin/env python

# coding=utf-8

# code from www.361way.com

try:

import cPickle as pickle

except:

import pickle

obj = {'a' : 'b', 'c' : 'd'}

obj2 = [0, 1, 1, 0, 1]

f = open('obj.pkl', 'wb')

pickle.dump(obj, f, protocol=2)

pickle.dump(obj2, f, protocol=2)

f.close()

f = open('obj.pkl', 'rb')

x1 = pickle.load(f)

x2 = pickle.load(f)

print x1,x2

f.close()

这里保存数据的时候,选用的是protocol 2,所以保存后的obj.pkl 打开会发现是乱码 。这里需要注意的是pickle不能指定key信息,只能按顺序一次次的load结果 。这点不像shelve模块 。

2、写入内存及读写

示例1中通过open将数据写入二进制文件或读取,通过StringIO模块,也可以将数据在内存中进行写入和读取 ,示例如下:

try:

import cPickle as pickle

except:

import pickle

import pprint

from StringIO import StringIO

class SimpleObject(object):

def __init__(self, name):

self.name = name

l = list(name)

l.reverse()

self.name_backwards = ''.join(l)

return

data = []

data.append(SimpleObject('pickle'))

data.append(SimpleObject('cPickle'))

data.append(SimpleObject('last'))

# Simulate a file with StringIO

out_s = StringIO()

# Write to the stream

for o in data:

print 'WRITING: %s (%s)' % (o.name, o.name_backwards)

pickle.dump(o, out_s)

out_s.flush()

# Set up a read-able stream

in_s = StringIO(out_s.getvalue())

# Read the data

while True:

try:

o = pickle.load(in_s)

except EOFError:

break

else:

print 'READ: %s (%s)' % (o.name, o.name_backwards)

执行结果如下:

$ python pickle_stream.py

WRITING: pickle (elkcip)

WRITING: cPickle (elkciPc)

WRITING: last (tsal)

READ: pickle (elkcip)

READ: cPickle (elkciPc)

READ: last (tsal)

3、pickle对像元素操作

在成为pickle的对象后即为列表对象,由此可对list进行一系列的操作,如下是一个append的示例:

>>> pw = open('test1','wb')

>>> pw.write(pickle.dumps(['a','b']))

>>> pw.close()

>>> pr = open("test1","rb")

>>> prf = pickle.load(pr)

>>> print(prf)

['a', 'b']

>>> print(prf.append('c'))

None

>>> print(prf)

['a', 'b', 'c']

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Intellij IDEA 4种配置热部署的方法

Intellij IDEA 4种配置热部署的方法 热部署可以使的修改代码后,无须重启服务器,就可以加载更改的代码。 第1种:修改服务器配置,使得IDEA窗口失去焦点时,更新类和资源 菜单Run -> EditConfiguration , 然后配置指定服…

mysql启动报错:Another MySQL daemon already running with the same unix socket.

[rootlocalhost ~]#/etc/init.d/mysqld restart Stopping mysqld: [ OK ] Another MySQL daemon already running with the same unix socket. Starting mysqld: [FAILED] 原因多个Mys…

malloc申请一维动态数组的错误

正确写法:int *tmp ( int * )malloc( H*W*sizeof(int) ); float *tmp ( float * )malloc( H*W*sizeof(float) ); double *tmp ( double * )malloc( H*W*sizeof(double) ); 错误写法:double *tmp ( double * )malloc( H*W*sizeof(double * ) ); 错…

java检查注入sql框架_Java:检查器框架

java检查注入sql框架我在JavaOne 2012上 了解的有趣的工具之一是Checker Framework 。 Checker Framework的网页之一 指出 ,Checker Framework“增强了Java的类型系统,使其更加强大和有用”,从而使软件开发人员“能够检测并防止Java程序中的错…

jqc3ff继电器引脚图_电气元件中间继电器的知识全面解读,欢迎电工朋友收藏!...

继电器(英文:Relay),也称电驿,是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。故在电路…

]remove-duplicates-from-sorted-list-ii (删除)

题意略&#xff1a; 思路都在注解里&#xff1a; #include<iostream> #include<cstdio> using namespace std;struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {}};class Solution {public:ListNode *deleteDuplicates(ListNode *h…

C语言动态数组建立方法

动态数组是指在声明时没有确定数组大小的数组&#xff0c;即忽略圆括号中的下标&#xff1b;当要用它时&#xff0c;可随时用ReDim语句&#xff08;C语言中用malloc语句&#xff09;重新指出数组的大小。使用动态数组的优点是可以根据用户需要&#xff0c;有效利用存储空间。 动…

Linux小宝典之理解Chroot模式

Chroot 在 Linux 系统中发挥了根目录的切换工作&#xff0c;同时带来了系统的安全性等好处。本文通过编写 chroot 来理解 chroot 的作用和好处&#xff0c;这不仅有助于更好的使用 chroot&#xff0c;同时加深了对 Linix 系统初始 RAM 磁盘工作的认识。 chroot&#xff0c;即 …

jHipster入门,第1部分

因此&#xff0c;您想保持技术的领先地位&#xff0c;但对所有活动部件感到不知所措。 你真幸运&#xff01; 这是jHipster发光的地方。 如果您喜欢Ruby on Rails或Grails的方法来快速启动和运行应用程序&#xff0c;那么这可能是适合您的选择。 jHipster旨在使设置应用程序变…

python每隔30s检查一次_用Python写一个“离线语音提示器”来提醒我们别忘记了时间...

前言本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。环境&#xff1a;Win7系统&#xff0c;外网未连接&#xff0c;主机接有返听音箱。准备&#xff1a;这里明显要用语音合成&#xff0c;既然是离线状态…

vue中map组件

分享一个比较好用的基于百度地图的vue组件。也有react版本的&#xff0c;可以自行选择。 分享链接&#xff1a;点击转载于:https://www.cnblogs.com/yunnex-xw/p/9996600.html

MATLAB中mean的用法

1、函数功能 求数组的平均数或者均值 2、使用方法 ① M mean(A) 返回沿数组中不同维的元素的平均值。 如果A是一个向量&#xff0c;mean(A)返回A中元素的平均值。 如果A是一个矩阵&#xff0c;mean(A)将其中的各列视为向量&#xff0c;把矩阵中的每列…

Linux中profile、bashrc、bash_profile之间的区别和联系

/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. 英文描述为&#xff1a; # /etc/profile # System wide environment and startup programs, for login setup # Functions and alias…

python selenium 等待元素出现_Python Selenium等待加载几个元素

考虑到Mr.E.和Arran的评论&#xff0c;我在CSS选择器上完全遍历了列表。棘手的部分是关于我自己的列表结构和标记(更改类等)&#xff0c;以及动态创建所需的选择器并在遍历期间将它们保存在内存中。我通过搜索任何未加载状态的内容来处理等待几个元素的问题。您也可以使用“&am…

网络操作系统第242页作业

1.简述电子邮件的工作原理。 答&#xff1a;用户编辑的E mail被转换成一个标准的邮件格式&#xff0c;这个邮件格式中可以包含各种样式的文件&#xff0c;如图像&#xff0c;声音&#xff0c;可执行程序等。邮件的内容以各种编码方式转换成ASCII码的形式&#xff0c;以便在网络…

MATLAB中median函数的用法

1.功能 求矩阵的中间值。 2.格式 ①median(M) 每一列返回一个值,为M该列的从大到小排列的中间值. ②median(M,dim) dim为1&#xff0c;2。其中1表示按每列返回一个值,为该列从大到小排列的中间值,, 2表示按每行返回一个值,为该行从大到小排列的中间值. 注意:如果行或列的个数为…

测试驱动开发 测试前移_测试驱动陷阱,第2部分

测试驱动开发 测试前移单元测试中单元的故事 在本文的上半部分 &#xff0c;您可能会看到一些不好但很受欢迎的测试示例。 但是我不是一个专业的批评家&#xff08;也被称为“巨魔”或“仇恨者”&#xff09;&#xff0c;没有任何建设性的话就抱怨。 多年的TDD教给我的不仅仅是…

CentOS6.3 重启后/etc/resolv.conf 被还原解决办法

今天一台服务器上不了网&#xff0c;设置了nameserver&#xff0c;重启后/etc/resolv.conf文件就被自动还原了&#xff0c;最后发现是被Network Manager修改了。 解决方法&#xff1a; 停止Network Manager服务 service NetworkManager stop重启网络服务 /etc/init.d/network r…

react安装_超全面详细一条龙教程!从零搭建React项目全家桶(上篇)

React是近几年来前端项目开发非常火的一个框架&#xff0c;其背景是Facebook团队的技术支持&#xff0c;市场占有率也很高。很多初学者纠结一开始是学react还是vue。个人觉得&#xff0c;有时间的话&#xff0c;最好两个都掌握一下。从学习难度上来说&#xff0c;react要比vue稍…

MATLAB中find函数详解

&#xff08;转自http://blog.sina.com.cn/emily250886&#xff09; 功能&#xff1a; 寻找非零元素的索引和值语法&#xff1a;1. ind find(X) 2. ind find(X, k) 3. ind find(X, k, first) 4. ind find(X, k, last) 5. [row,col] find(X, ...) 6. [row,col,v] f…