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函数缺省值与引用学习笔记分享
Feb 10 Python
Python语言的12个基础知识点小结
Jul 10 Python
python统计日志ip访问数的方法
Jul 06 Python
深入浅析Python中join 和 split详解(推荐)
Jun 30 Python
python实现二分查找算法
Sep 21 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
Oct 18 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
Dec 05 Python
分析运行中的 Python 进程详细解析
Jun 22 Python
Python函数参数类型及排序原理总结
Dec 19 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
Feb 23 Python
Python 解决相对路径问题:"No such file or directory"
Jun 05 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
Sep 03 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下HTTP Response中的Chunked编码实现方法
2008/11/19 PHP
php 注册时输入信息验证器的实现详解
2013/07/05 PHP
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
php计算整个目录大小的方法
2015/06/19 PHP
Yii2简单实现给表单添加验证码的方法
2016/07/18 PHP
PHP实现的多进程控制demo示例
2019/07/22 PHP
ArrayList类(增强版)
2007/04/04 Javascript
Javascript Global对象
2009/08/13 Javascript
js 模拟气泡屏保效果代码
2010/07/10 Javascript
Jquery知识点一 Jquery的ready和Dom的onload的区别
2011/01/15 Javascript
ComboBox 和 DateField 在IE下消失的解决方法
2013/08/30 Javascript
JavaScript将数据转换成整数的方法
2014/01/04 Javascript
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
2016/11/01 Javascript
AngularJS1.X学习笔记2-数据绑定详解
2017/04/01 Javascript
javascript 中的try catch应用总结
2017/04/01 Javascript
jQuery实现拼图小游戏(实例讲解)
2017/07/24 jQuery
详细介绍RxJS在Angular中的应用
2017/09/23 Javascript
详解vue-cli 接口代理配置
2017/12/13 Javascript
利用Angular2 + Ionic3开发IOS应用实例教程
2018/01/15 Javascript
vue微信分享出来的链接点开是首页问题的解决方法
2018/11/28 Javascript
学习LayUI时自研的表单参数校验框架案例分析
2019/07/29 Javascript
微信小程序request请求封装,验签代码实例
2019/12/04 Javascript
Vue-cli 移动端布局和动画使用详解
2020/08/10 Javascript
基于JavaScript实现随机点名器
2021/02/25 Javascript
用python代码做configure文件
2014/07/20 Python
Python引用传值概念与用法实例小结
2017/10/07 Python
Python基础之函数的定义与使用示例
2019/03/23 Python
解决Jupyter因卸载重装导致的问题修复
2020/04/10 Python
python使用bs4爬取boss直聘静态页面
2020/10/10 Python
户外拓展活动方案
2014/02/11 职场文书
校友会致辞
2015/07/30 职场文书
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python
CSS实现九宫格布局(自适应)的示例代码
2022/02/12 HTML / CSS
win11怎么消除图标小盾牌?win11消除图标小盾牌解决方法
2022/08/05 数码科技