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 相关文章推荐
简介Django框架中可使用的各类缓存
Jul 23 Python
python音频处理用到的操作的示例代码
Oct 27 Python
python3大文件解压和基本操作
Dec 15 Python
Python和Java进行DES加密和解密的实例
Jan 09 Python
Python编程中flask的简介与简单使用
Dec 28 Python
python实现网页自动签到功能
Jan 21 Python
python集合常见运算案例解析
Oct 17 Python
Python3 assert断言实现原理解析
Mar 02 Python
基于K.image_data_format() == 'channels_first' 的理解
Jun 29 Python
如何设置PyCharm中的Python代码模版(推荐)
Nov 20 Python
如何用 Python 制作一个迷宫游戏
Feb 25 Python
pytorch 中forward 的用法与解释说明
Feb 26 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新手上路(九)
2006/10/09 PHP
在PHP中养成7个面向对象的好习惯
2010/01/28 PHP
php include和require的区别深入解析
2013/06/17 PHP
PHP数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
PHP+Ajax验证码验证用户登录
2016/07/20 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
自动生成文章摘要的代码[JavaScript 版本]
2007/03/20 Javascript
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
js onload处理html页面加载之后的事件
2013/10/30 Javascript
原生js做的手风琴效果的导航菜单
2013/11/08 Javascript
js设置cookie过期当前时间减去一秒相当于立即过期
2014/09/04 Javascript
jquery制作 随机弹跳的小球特效
2015/02/01 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
JavaScript实现身份证验证代码
2016/02/17 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
Vue原理剖析 实现双向绑定MVVM
2017/05/03 Javascript
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
vue 的keep-alive缓存功能的实现
2018/03/22 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
2019/02/27 Javascript
vue中多路由表头吸顶实现的几种布局方式
2019/04/12 Javascript
小程序组件传值和引入sass的方法(使用vant Weapp组件库)
2020/11/24 Javascript
python使用mailbox打印电子邮件的方法
2015/04/30 Python
浅析Python基础-流程控制
2016/03/18 Python
python 类详解及简单实例
2017/03/24 Python
python爬取淘宝商品详情页数据
2018/02/23 Python
django框架自定义用户表操作示例
2018/08/07 Python
python匿名函数用法实例分析
2019/08/03 Python
Python实现的爬取豆瓣电影信息功能案例
2019/09/15 Python
Python3 selenium 实现QQ群接龙自动化功能
2020/04/17 Python
Python 利用argparse模块实现脚本命令行参数解析
2020/12/28 Python
详解HTML5 Canvas绘制时指定颜色与透明度的方法
2016/03/25 HTML / CSS
TOWER London官网:鞋子、靴子、运动鞋等
2019/07/14 全球购物
介绍一下XMLHttpRequest对象
2012/02/12 面试题
社区文明倡议书
2015/04/28 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS