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利用pyHook实现监听用户鼠标与键盘事件
Aug 21 Python
在Python中进行自动化单元测试的教程
Apr 15 Python
Python实现将Excel转换为json的方法示例
Aug 05 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
Jan 04 Python
浅谈Django学习migrate和makemigrations的差别
Jan 18 Python
python实现冒泡排序算法的两种方法
Mar 10 Python
Python基于多线程操作数据库相关问题分析
Jul 11 Python
Python网页正文转换语音文件的操作方法
Dec 09 Python
python实现全排列代码(回溯、深度优先搜索)
Feb 26 Python
浅谈Python中os模块及shutil模块的常规操作
Apr 03 Python
python3爬虫中引用Queue的实例讲解
Nov 24 Python
Python基础知识之变量的详解
Apr 14 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/12/14 PHP
如何在HTML 中嵌入 PHP 代码
2015/05/13 PHP
yii使用activeFileField控件实现上传文件与图片的方法
2015/12/28 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
2016/05/31 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
php实现文章评论系统
2019/02/18 PHP
jQuery插件开发基础简单介绍
2013/01/07 Javascript
我的Node.js学习之路(二)NPM模块管理
2014/07/06 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
2015/08/25 Javascript
BootStrap下拉框在firefox浏览器界面不友好的解决方案
2016/08/18 Javascript
微信小程序 form组件详解及简单实例
2017/01/10 Javascript
快速实现jQuery多级菜单效果
2017/02/01 Javascript
JavaScript实现弹出广告功能
2017/03/30 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
2018/09/28 Javascript
Vue项目部署在Spring Boot出现页面空白问题的解决方案
2018/11/26 Javascript
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
JS的时间格式化和时间戳转换函数示例详解
2020/07/27 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
2020/08/03 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
vue实现抽屉弹窗效果
2020/11/15 Javascript
python中sets模块的用法实例
2014/09/30 Python
利用python爬取软考试题之ip自动代理
2017/03/28 Python
python八大排序算法速度实例对比
2017/12/06 Python
Python排序搜索基本算法之插入排序实例分析
2017/12/11 Python
Django上使用数据可视化利器Bokeh解析
2019/07/31 Python
Python Flask异步发送邮件实现方法解析
2020/08/01 Python
python 对一幅灰度图像进行直方图均衡化
2020/10/27 Python
python Zmail模块简介与使用示例
2020/12/19 Python
在HTML5 canvas里用卷积核进行图像处理的方法
2018/05/02 HTML / CSS
英国布鲁姆精品店:Bloom Boutique
2018/03/01 全球购物
香港艺人陈冠希创办的潮流品牌:JUICESTORE
2021/03/04 全球购物
学校党的群众路线教育实践活动整改措施
2014/10/25 职场文书
党员承诺书范文2015
2015/04/27 职场文书
高中政治教学反思
2016/02/23 职场文书
Python破解极验滑动验证码详细步骤
2021/05/21 Python