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实现批量下载文件
May 17 Python
Python字符串特性及常用字符串方法的简单笔记
Jan 04 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
Mar 20 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
Oct 28 Python
python 遍历列表提取下标和值的实例
Dec 25 Python
Python 实现文件打包、上传与校验的方法
Feb 13 Python
python框架flask表单实现详解
Nov 04 Python
利用python控制Autocad:pyautocad方式
Jun 01 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
Aug 03 Python
python3跳出一个循环的实例操作
Aug 18 Python
Django filter动态过滤与排序实现过程解析
Nov 26 Python
Python可变与不可变数据和深拷贝与浅拷贝
Apr 06 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中Session和Cookie是如何操作的
2015/10/10 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
2016/05/17 PHP
获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)
2011/02/14 Javascript
javascript查找字符串中出现最多的字符和次数的小例子
2013/10/29 Javascript
扩展JS Date对象时间格式化功能的小例子
2013/12/02 Javascript
nodejs教程之制作一个简单的文章发布系统
2014/11/21 NodeJs
浅谈重写window对象的方法
2014/12/29 Javascript
Nodejs学习笔记之入门篇
2015/04/16 NodeJs
浅谈JavaScript异常处理语句
2015/06/26 Javascript
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
解析Node.js异常处理中domain模块的使用方法
2016/02/16 Javascript
jQuery树形控件zTree使用小结
2016/08/02 Javascript
js实现用户输入的小写字母自动转大写字母的方法
2017/01/21 Javascript
微信小程序 JS动态修改样式的实现代码
2017/02/10 Javascript
video.js使用改变ui过程
2017/03/05 Javascript
简单实现js点击展开二级菜单功能
2017/05/16 Javascript
vue打开子组件弹窗都刷新功能的实现
2020/09/21 Javascript
python采集博客中上传的QQ截图文件
2014/07/18 Python
Python 绘图库 Matplotlib 入门教程
2018/04/19 Python
用Python PIL实现几个简单的图片特效
2019/01/18 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
2019/10/10 Python
使用python切片实现二维数组复制示例
2019/11/26 Python
MxNet预训练模型到Pytorch模型的转换方式
2020/05/25 Python
keras绘制acc和loss曲线图实例
2020/06/15 Python
Python程序慢的重要原因
2020/09/04 Python
Python 实现集合Set的示例
2020/12/21 Python
康帕斯酒店预订:Compass Hospitality(支持中文)
2018/08/23 全球购物
Java中实现多态的机制是什么?
2014/12/07 面试题
教育学专业实习生的自我鉴定
2013/11/26 职场文书
七年级生物教学反思
2014/01/30 职场文书
酒店管理专业毕业生求职自荐信
2014/04/28 职场文书
工作违纪的检讨书范文
2019/07/09 职场文书
创业计划书之面包店
2019/09/17 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python
CSS中理解层叠性及权重如何分配
2022/12/24 HTML / CSS