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的for和break循环结构中使用else语句的技巧
May 24 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
Jul 06 Python
Python中顺序表的实现简单代码分享
Jan 09 Python
pandas pivot_table() 按日期分多列数据的方法
Nov 16 Python
Python3删除排序数组中重复项的方法分析
Jan 31 Python
python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决
Apr 29 Python
对Python3之方法的覆盖与super函数详解
Jun 26 Python
python 魔法函数实例及解析
Sep 25 Python
pycharm设置python文件模板信息过程图解
Mar 10 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
Apr 08 Python
Python读取excel文件中带公式的值的实现
Apr 17 Python
Python包资源下载路径报404解决方案
Nov 05 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
ADODB类使用
2006/11/25 PHP
一些常用的php简单命令代码集锦
2007/09/24 PHP
简单实用的网站PHP缓存类实例
2014/07/18 PHP
PHP文件缓存类示例分享
2015/01/30 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
PHP互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
javascript 显示当前系统时间代码
2009/12/28 Javascript
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
jqGrid jQuery 表格插件测试代码
2011/08/23 Javascript
jQuery登陆判断简单实现代码
2013/04/21 Javascript
JQuery中使用ajax传输超大数据的解决方法
2014/07/14 Javascript
jquery中获取元素里某一特定子元素的代码
2014/12/02 Javascript
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
js获取表格的行数和列数的方法
2015/10/23 Javascript
基于JavaScript实现TAB标签效果
2016/01/12 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
Bootstrap 布局组件(全)
2016/07/18 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
2016/11/30 Javascript
详解Angular4中路由Router类的跳转navigate
2017/06/09 Javascript
js实现单张图片平移切换效果
2017/10/11 Javascript
React Native使用Modal自定义分享界面的示例代码
2017/10/31 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
vue项目中使用Svg的方法
2018/10/24 Javascript
微信小程序中使用echarts的实现方法
2019/04/24 Javascript
jQuery pager.js 插件动态分页功能实例分析
2019/08/02 jQuery
[02:54]辉夜杯主赛事第二日败者组 iG.V赛后采访
2015/12/26 DOTA
python 读取.csv文件数据到数组(矩阵)的实例讲解
2018/06/14 Python
使用Python的SymPy库解决数学运算问题的方法
2019/03/27 Python
linux环境中没有网络怎么下载python
2019/07/07 Python
贝玲妃英国官网:Benefit英国
2018/02/03 全球购物
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
TecoBuy澳大利亚:在线电子和小工具商店
2020/06/25 全球购物
办公楼租房协议书范本
2014/11/25 职场文书
干部年终考核评语
2015/01/04 职场文书
个人思想政治总结
2015/03/05 职场文书
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS