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中__name__的使用实例
Apr 14 Python
Python多层嵌套list的递归处理方法(推荐)
Jun 08 Python
Python多线程原理与用法实例剖析
Jan 22 Python
Python3.5 Pandas模块之Series用法实例分析
Apr 23 Python
Python TestCase中的断言方法介绍
May 02 Python
pyqt5实现按钮添加背景图片以及背景图片的切换方法
Jun 13 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
Sep 24 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
Nov 11 Python
Django 实现xadmin后台菜单改为中文
Nov 15 Python
python 利用zmail库发送邮件
Sep 11 Python
python批量生成条形码的示例
Oct 10 Python
python基于Kivy写一个图形桌面时钟程序
Jan 28 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 数学运算验证码实现代码
2009/10/11 PHP
php.ini中的request_order推荐设置
2015/05/10 PHP
简单谈谈favicon
2015/06/10 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
2019/12/12 PHP
javascript权威指南 学习笔记之变量作用域分享
2011/09/28 Javascript
js读取被点击次数的简单实例(从数据库中读取)
2014/03/07 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
基于jQuery实现的旋转彩圈实例
2015/06/26 Javascript
JS实现的3D拖拽翻页效果代码
2015/10/31 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
2015/11/30 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
2015/12/22 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
jquery datatable服务端分页
2016/08/31 Javascript
详解webpack es6 to es5支持配置
2017/05/04 Javascript
es6学习笔记之Async函数基本教程
2017/05/11 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
Vue 开发必须知道的36个技巧(小结)
2019/10/09 Javascript
node.js基础知识汇总
2020/08/25 Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
2020/09/10 Javascript
[04:59]2018DOTA2亚洲邀请赛 4.7 Mineski夺冠时刻
2018/04/09 DOTA
用python代码做configure文件
2014/07/20 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
python实现kNN算法识别手写体数字的示例代码
2019/08/16 Python
pytorch: Parameter 的数据结构实例
2019/12/31 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
2020/06/18 Python
利用纯css3实现的文字亮光特效的代码演示
2014/11/27 HTML / CSS
公司会计岗位职责
2014/02/13 职场文书
二手房购房意向书范本
2014/04/01 职场文书
行政执法队伍作风整顿剖析材料
2014/10/11 职场文书
2015年小学生新年寄语
2014/12/08 职场文书
张丽莉观后感
2015/06/16 职场文书
大学同学聚会感言
2015/07/30 职场文书
升学宴家长答谢词
2015/09/29 职场文书
Redis 常见使用场景
2021/08/30 Redis