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 代码性能优化技巧分享
Aug 07 Python
介绍Python的Urllib库的一些高级用法
Apr 30 Python
Python实现的选择排序算法原理与用法实例分析
Nov 22 Python
python实现简单五子棋游戏
Jun 18 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
Mar 23 Python
Python转换字典成为对象,可以用"."方式访问对象属性实例
May 11 Python
在python下实现word2vec词向量训练与加载实例
Jun 09 Python
Python应用实现双指数函数及拟合代码实例
Jun 19 Python
Python调用C/C++的方法解析
Aug 05 Python
Python用来做Web开发的优势有哪些
Aug 05 Python
运行Python编写的程序方法实例
Oct 21 Python
python try...finally...的实现方法
Nov 25 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
php使用for语句输出三角形的方法
2015/06/09 PHP
Thinkphp连表查询及数据导出方法示例
2016/10/15 PHP
AES加解密在php接口请求过程中的应用示例
2016/10/26 PHP
深入了解PHP中的Array数组和foreach
2016/11/06 PHP
Zend Framework入门应用实例详解
2016/12/11 PHP
如何判断图片地址是否失效
2007/02/02 Javascript
ECMAScript 创建自己的js类库
2012/11/22 Javascript
jQuery处理json数据返回数组和输出的方法
2015/03/11 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
Nodejs进阶:核心模块net入门学习与实例讲解
2016/11/21 NodeJs
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
2017/03/15 Javascript
Angular2开发——组件规划篇
2017/03/28 Javascript
Bootstrap模态对话框用法简单示例
2018/08/31 Javascript
微信小程序中使用echarts的实现方法
2019/04/24 Javascript
如何通过shell脚本自动生成vue文件详解
2019/09/10 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
[53:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第三场 1月18日
2021/03/11 DOTA
Python bsddb模块操作Berkeley DB数据库介绍
2015/04/08 Python
python中dir函数用法分析
2015/04/17 Python
使用python存储网页上的图片实例
2018/05/22 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
2013/01/06 HTML / CSS
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
构造器Constructor是否可被override?
2013/08/06 面试题
将"引用"作为函数返回值类型的格式、好处和需要遵守的规则
2016/02/09 面试题
新闻学专业个人求职信写作
2014/02/04 职场文书
法人授权委托书样本
2014/09/19 职场文书
2015年教研员工作总结
2015/05/26 职场文书
八年级英语教学反思
2016/02/15 职场文书
python必学知识之文件操作(建议收藏)
2021/05/30 Python
面试中canvas绘制图片模糊图片问题处理
2022/03/13 Javascript