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学习笔记(一)(基础入门之环境搭建)
Jun 05 Python
Python标准库与第三方库详解
Jul 22 Python
Python爬取京东的商品分类与链接
Aug 26 Python
Python利用QQ邮箱发送邮件的实现方法(分享)
Jun 09 Python
Python基于xlrd模块操作Excel的方法示例
Jun 21 Python
有关Python的22个编程技巧
Aug 29 Python
解决python3读取Python2存储的pickle文件问题
Oct 25 Python
在Python中pandas.DataFrame重置索引名称的实例
Nov 06 Python
python命令行工具Click快速掌握
Jul 04 Python
django的ORM操作 增加和查询
Jul 26 Python
TensorFlow——Checkpoint为模型添加检查点的实例
Jan 21 Python
python爬虫scrapy框架的梨视频案例解析
Feb 20 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优于Node.js的五大理由分享
2012/09/15 PHP
php设计模式之单例、多例设计模式的应用分析
2013/06/30 PHP
PHP在线调试执行的实现方法(附demo源码)
2016/04/28 PHP
thinkPHP模板引擎用法示例
2016/12/08 PHP
mac系统下安装多个php并自由切换的方法详解
2017/04/21 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
Yii框架的路由配置方法分析
2019/09/09 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
2020/03/02 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
推荐40款强大的 jQuery 导航插件和教程(上篇)
2012/09/14 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
Angular的$http与$location
2016/12/26 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
React Native第三方平台分享的实例(Android,IOS双平台)
2017/08/04 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
js实现全选反选不选功能代码详解
2019/04/24 Javascript
浅谈vue中resetFields()使用注意事项
2020/08/12 Javascript
详解Python import方法引入模块的实例
2017/08/02 Python
python多任务之协程的使用详解
2019/08/26 Python
python filecmp.dircmp实现递归比对两个目录的方法
2020/05/22 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
2020/05/26 Python
Python进行统计建模
2020/08/10 Python
利用纯CSS3实现动态的自行车特效源码
2017/01/20 HTML / CSS
平面设计的岗位职责
2013/11/08 职场文书
自我评价怎么写正确呢?
2013/12/02 职场文书
房产委托公证书
2014/04/08 职场文书
专项法律服务方案
2014/06/11 职场文书
违纪学生保证书
2015/02/27 职场文书
2016秋季校长开学典礼致辞
2015/11/26 职场文书
2019新学期家长会工作计划
2019/08/21 职场文书
CSS3新特性详解(五):多列columns column-count和flex布局
2021/04/30 HTML / CSS
MySQL中VARCHAR与CHAR格式数据的区别
2021/05/26 MySQL
SQL IDENTITY_INSERT作用案例详解
2021/08/23 MySQL
http通过StreamingHttpResponse完成连续的数据传输长链接方式
2022/02/12 Python