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模块顶层运行的代码引起的一个Bug
Jul 04 Python
Python判断某个用户对某个文件的权限
Oct 13 Python
python3使用PyMysql连接mysql数据库实例
Feb 07 Python
浅谈Python2.6和Python3.0中八进制数字表示的区别
Apr 28 Python
详解TensorFlow查看ckpt中变量的几种方法
Jun 19 Python
python ftp 按目录结构上传下载的实现代码
Sep 12 Python
Python使用gRPC传输协议教程
Oct 16 Python
python中eval与int的区别浅析
Aug 11 Python
python爬虫添加请求头代码实例
Dec 28 Python
解决django框架model中外键不落实到数据库问题
May 20 Python
Python爬虫之爬取二手房信息
Apr 27 Python
详解Flask开发技巧之异常处理
Jun 15 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/12/28 PHP
PHP性能优化 产生高度优化代码
2011/07/22 PHP
浅析is_writable的php实现
2013/06/18 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
2013/08/16 PHP
php计划任务之ignore_user_abort函数实现方法
2015/01/08 PHP
浅谈PHP值mysql操作类
2016/06/29 PHP
PHP接收App端发送文件流的方法
2016/09/23 PHP
B/S开发中常用javaScript技术与代码
2007/03/09 Javascript
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
JavaScript去除空格的三种方法(正则/传参函数/trim)
2013/02/06 Javascript
Extjs4 GridPanel 的几种样式使用介绍
2013/04/18 Javascript
关于js遍历表格的实例
2013/07/10 Javascript
浅析tr的隐藏和显示问题
2014/03/05 Javascript
jQuery分别获取选中的复选框值的示例
2014/06/17 Javascript
加载列表时jquery获取ul中第一个li的属性
2014/11/02 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
2015/11/24 Javascript
Bootstrap~多级导航(级联导航)的实现效果【附代码】
2016/03/08 Javascript
原生js实现弹出层效果
2017/01/20 Javascript
简单谈谈关于Angular Cli打包的事
2017/09/05 Javascript
layer.close()关闭进度条和Iframe窗的方法
2018/08/17 Javascript
vue引入axios同源跨域问题
2018/09/27 Javascript
vue通过cookie获取用户登录信息的思路详解
2018/10/30 Javascript
vue源码中的检测方法的实现
2019/09/26 Javascript
[14:57]DOTA2 HEROS教学视频教你分分钟做大人-幽鬼
2014/06/13 DOTA
运动检测ViBe算法python实现代码
2018/01/09 Python
python实现闹钟定时播放音乐功能
2018/01/25 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
美国猫狗药物和用品网站:PetCareRx
2017/01/05 全球购物
数据库连接池的工作原理
2012/09/26 面试题
财务人员个人求职信范文
2013/12/04 职场文书
工地标语大全
2014/06/18 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
采购部2015年度工作总结
2015/07/24 职场文书
导游词之永泰公主墓
2019/12/04 职场文书
详解TS数字分隔符和更严格的类属性检查
2021/05/06 Javascript
python中的getter与setter你了解吗
2022/03/24 Python