Python序列化基础知识(json/pickle)


Posted in Python onOctober 19, 2017

     我们把对象(变量)从内存中变成可存储的过程称之为序列化,比如XML,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。

    序列化后,就可以把序列化后的内容写入磁盘,或者通过网络传输到其他服务器上,反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling

json(JavaScript Object Notation)

    一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

    如果我们要在不同的变成语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输,JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便,JSON表示的对象就是标准的JavaScript语言的对象。

使用方法如下:

import json
# 序列化写(json.dumps())
with open('test.txt', 'w') as f:
  f.write(json.dumps(dic))
# 序列化读(json.loads)
with open('test.txt', 'r') as f:
  print(json.loads(f.read()))

import json
dic = {'name': 'fanjinbao'}
# 序列化写(json.dump())
with open('test.txt', 'w') as f:
  json.dump(dic, f)
# 序列化读(json.load())
with open('test.txt', 'r') as f:
  print(json.load(f))

pickle

    python的pickle模块实现了python的所有数据序列和反序列化。基本上功能使用和JSON模块没有太大区别,方法也同样是dumps/dump和loads/load。cPickle是pickle模块的C语言编译版本相对速度更快。与JSON不同的是pickle不是用于多种语言间的数据传输,它仅作为python对象的持久化或者python程序间进行互相传输对象的方法,因此它支持了python所有的数据类型。

pickle反序列化后的对象与原对象是等值的副本对象,类似与deepcopy。

使用方法如下:

import pickle
dic = {'name': 'fanjinbao'}
# 序列化写(pickle.dump())
with open('test.txt', 'wb') as f:
  f.write(pickle.dumps(dic))
# 序列化读(pickle.loads())
with open('test.txt', 'rb') as f:
  print(pickle.loads(f.read()))

import pickle
dic = {'name': 'fanjinbao'}
# 序列化写(pickle.dump())
with open('test.txt', 'wb') as f:
  pickle.dump(dic, f)
# 序列化读(pickle.load())
with open('test.txt', 'rb') as f:
  print(pickle.load(f))

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

Python 相关文章推荐
简述Python中的面向对象编程的概念
Apr 27 Python
Python压缩解压缩zip文件及破解zip文件密码的方法
Nov 04 Python
python绘制铅球的运行轨迹代码分享
Nov 14 Python
python reduce 函数使用详解
Dec 05 Python
python模拟表单提交登录图书馆
Apr 27 Python
使用Django开发简单接口实现文章增删改查
May 09 Python
python3发送邮件需要经过代理服务器的示例代码
Jul 25 Python
python实现PID算法及测试的例子
Aug 08 Python
Python多线程爬取豆瓣影评API接口
Oct 22 Python
基于python+selenium的二次封装的实现
Jan 06 Python
基于python爬取梨视频实现过程解析
Nov 09 Python
python的scipy.stats模块中正态分布常用函数总结
Feb 19 Python
Django ORM框架的定时任务如何使用详解
Oct 19 #Python
Python 2.x如何设置命令执行的超时时间实例
Oct 19 #Python
详解使用 pyenv 管理多个版本 python 环境
Oct 19 #Python
python3使用pyqt5制作一个超简单浏览器的实例
Oct 19 #Python
PyQt5利用QPainter绘制各种图形的实例
Oct 19 #Python
python连接数据库的方法
Oct 19 #Python
Python3使用PyQt5制作简单的画板/手写板实例
Oct 19 #Python
You might like
第六节--访问属性和方法
2006/11/16 PHP
用ADODB来让PHP操作ACCESS数据库的方法
2006/12/31 PHP
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
php实现文本数据导入SQL SERVER
2015/05/17 PHP
php 猴子摘桃的算法
2017/06/20 PHP
JS宝典学习笔记(下)
2007/01/10 Javascript
jQuery 判断页面元素是否存在的代码
2009/08/14 Javascript
Jquery 实现Tab效果 思路是js思路
2010/03/02 Javascript
在模板页面的js使用办法
2010/04/01 Javascript
js Event对象的5种坐标
2011/09/12 Javascript
js中一维数组和二位数组中的几个问题示例说明
2014/07/17 Javascript
《JavaScript DOM 编程艺术》读书笔记之DOM基础
2015/01/09 Javascript
JavaScript实现拖拽网页内元素的方法
2015/04/15 Javascript
AngularJS Bootstrap详细介绍及实例代码
2016/07/28 Javascript
微信小程序 Audio API详解及实例代码
2016/09/30 Javascript
H5移动端适配 Flexible方案
2016/10/24 Javascript
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
微信小程序模拟cookie的实现
2018/06/20 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
JS+CSS3实现的简易钟表效果示例
2019/04/13 Javascript
微信小程序开发之转发分享功能
2019/10/22 Javascript
纯JS实现五子棋游戏
2020/05/28 Javascript
js动态生成表格(节点操作)
2021/01/12 Javascript
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
2018/04/05 Python
python 梯度法求解函数极值的实例
2019/07/10 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
2019/12/04 Python
python实现测试工具(二)——简单的ui测试工具
2020/10/19 Python
CSS3 transforms应用于背景图像的解决方法
2019/04/16 HTML / CSS
鉴定评语大全
2014/05/05 职场文书
助人为乐好少年事迹材料
2014/08/18 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
绍兴鲁迅故居导游词
2015/02/09 职场文书
2019年中学生的思想品德评语集锦
2019/12/19 职场文书
解决linux下redis数据库overcommit_memory问题
2022/02/24 Redis
Vue的生命周期一起来看看
2022/02/24 Vue.js
git中cherry-pick命令的使用教程
2022/06/25 Servers