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实现bucket排序算法实例分析
May 04 Python
python将文本分每两行一组并保存到文件
Mar 19 Python
Python3几个常见问题的处理方法
Feb 26 Python
python绘制地震散点图
Jun 18 Python
python输出电脑上所有的串口名的方法
Jul 02 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
Feb 27 Python
Python使用type动态创建类操作示例
Feb 29 Python
python 实现仿微信聊天时间格式化显示的代码
Apr 17 Python
解决Keras 中加入lambda层无法正常载入模型问题
Jun 16 Python
查看keras的默认backend实现方式
Jun 19 Python
Python常用断言函数实例汇总
Nov 30 Python
浅谈Selenium+Webdriver 常用的元素定位方式
Jan 13 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
利用Memcached在php下实现session机制 替换PHP的原生session支持
2010/08/21 PHP
php实现telnet功能示例
2014/04/08 PHP
通过curl模拟post和get方式提交的表单类
2014/04/23 PHP
php使用类继承解决代码重复的问题
2015/02/11 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
js querySelector() 使用方法
2016/12/21 Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
2017/01/08 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
2017/03/24 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
微信小程序之前台循环数据绑定
2017/08/18 Javascript
BootStrap Table实现server分页序号连续显示功能(当前页从上一页的结束序号开始)
2017/09/12 Javascript
layui 动态设置checbox 选中状态的例子
2019/09/02 Javascript
浅析vue-router中params和query的区别
2019/12/24 Javascript
微信小程序如何实现点击图片放大功能
2020/01/21 Javascript
Vue 请求传公共参数的操作
2020/07/31 Javascript
js canvas实现五子棋小游戏
2021/01/22 Javascript
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
Python实现快速多线程ping的方法
2015/07/15 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
django admin 添加自定义链接方式
2020/03/11 Python
Python super()方法原理详解
2020/03/31 Python
如何用用Python将地址标记在地图上
2021/02/07 Python
电子商务专业毕业生工作推荐信
2013/11/17 职场文书
献爱心大型公益活动策划方案
2014/09/15 职场文书
工作粗心大意检讨书
2014/09/18 职场文书
优秀大学生事迹材料
2014/12/24 职场文书
红十字会救护培训简讯
2015/07/20 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
提取视频中的音频 Python只需要三行代码!
2021/05/10 Python
Python语言规范之Pylint的详细用法
2021/06/24 Python
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫
Python使用openpyxl模块处理Excel文件
2022/06/05 Python
python如何利用cv2.rectangle()绘制矩形框
2022/12/24 Python