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发送邮件实例分享
Jul 28 Python
Python切片工具pillow用法示例
Mar 30 Python
基于python历史天气采集的分析
Feb 14 Python
Python中dict和set的用法讲解
Mar 28 Python
Python类中方法getitem和getattr详解
Aug 30 Python
python中seaborn包常用图形使用详解
Nov 25 Python
tensorflow多维张量计算实例
Feb 11 Python
python实现单张图像拼接与批量图片拼接
Mar 23 Python
Python任务调度模块APScheduler使用
Apr 15 Python
Python持续监听文件变化代码实例
Jul 22 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
Jan 28 Python
python 如何在list中找Topk的数值和索引
May 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
正义联盟的终局之战《天启星战争》将成为DC动画宇宙的最后一部
2020/04/09 欧美动漫
PHP 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
PHP图形计数器程序显示网站用户浏览量
2016/07/20 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
PHP网页安全认证的实例详解
2017/09/28 PHP
PHP number_format函数原理及实例解析
2020/07/14 PHP
javascript replace()正则替换实现代码
2010/02/26 Javascript
jquery弹出框的用法示例(2)
2013/08/26 Javascript
JavaScript实现存储HTML字符串示例
2014/04/21 Javascript
详解JavaScript 中的 replace 方法
2016/01/01 Javascript
微信小程序动态添加分享数据
2017/06/14 Javascript
深入解析Vue 组件命名那些事
2017/07/18 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
解决vue router组件状态刷新消失的问题
2018/08/01 Javascript
解决webpack dev-server不能匹配post请求的问题
2018/08/24 Javascript
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
Python实现获取操作系统版本信息方法
2015/04/08 Python
Python中用max()方法求最大值的介绍
2015/05/15 Python
详解Python中的strftime()方法的使用
2015/05/22 Python
python字符串string的内置方法实例详解
2018/05/14 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
python 格式化输出百分号的方法
2019/01/20 Python
Django REST framework 分页的实现代码
2019/06/19 Python
基于python实现学生信息管理系统
2019/11/22 Python
CSS3 实现童年的纸飞机
2019/05/05 HTML / CSS
HTML5的postMessage的使用手册
2018/12/19 HTML / CSS
Under Armour安德玛法国官网:美国高端运动科技品牌
2018/06/29 全球购物
日本航空官方网站:JAL
2019/06/19 全球购物
意大利奢侈品牌在线精品店:Jole.it
2020/11/23 全球购物
大学新生军训自我鉴定
2014/03/18 职场文书
无私奉献演讲稿
2014/09/04 职场文书
教师批评与自我批评
2014/10/15 职场文书
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
2014年招商工作总结
2014/11/22 职场文书
Github 使用python对copilot做些简单使用测试
2022/04/14 Python
SQL Server中T-SQL标识符介绍与无排序生成序号的方法
2022/05/25 SQL Server