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 相关文章推荐
py中的目录与文件判别代码
Jul 16 Python
Python中的fileinput模块的简单实用示例
Jul 09 Python
Python制作简易注册登录系统
Dec 15 Python
Python实现树的先序、中序、后序排序算法示例
Jun 23 Python
python实现关键词提取的示例讲解
Apr 28 Python
在python中按照特定顺序访问字典的方法详解
Dec 14 Python
Python3解释器知识点总结
Feb 19 Python
Python开启线程,在函数中开线程的实例
Feb 22 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
Jul 19 Python
对Python中 \r, \n, \r\n的彻底理解
Mar 06 Python
python函数指定默认值的实例讲解
Mar 29 Python
python运算符之与用户交互
Apr 13 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 var_export与var_dump 输出的不同
2013/08/09 PHP
php检测文件编码的方法示例
2014/04/25 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
Zend Framework教程之Zend_Db_Table用法详解
2016/03/21 PHP
DWR Ext 加载数据
2009/03/22 Javascript
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
jquery ajax方式直接提交整个表单核心代码
2013/08/15 Javascript
js中判断对象是否为空的三种实现方法
2013/12/23 Javascript
深入理解javascript原型链和继承
2014/09/23 Javascript
简单实现jQuery进度条轮播实例代码
2016/06/20 Javascript
原生JS实现-星级评分系统的简单实例
2016/08/21 Javascript
js实现textarea限制输入字数
2017/02/13 Javascript
jquery表单验证实例仿Toast提示效果
2017/03/03 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
2019/07/25 Javascript
初步介绍Python中的pydoc模块和distutils模块
2015/04/13 Python
Python整型运算之布尔型、标准整型、长整型操作示例
2017/07/21 Python
Python生成器以及应用实例解析
2018/02/08 Python
简单谈谈python基本数据类型
2018/09/26 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
2018/10/21 Python
python实现单链表的方法示例
2019/09/03 Python
Pycharm 字体大小调整设置的方法实现
2019/09/27 Python
Python如何基于Tesseract实现识别文字功能
2020/06/05 Python
Python Celery异步任务队列使用方法解析
2020/08/10 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
python字典按照value排序方法
2020/12/28 Python
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
2014/09/16 面试题
艺术应用与设计个人的自我评价
2013/11/23 职场文书
医院护士的求职信范文
2013/12/26 职场文书
建筑工地质量标语
2014/06/12 职场文书
咖啡店创业计划书范文
2014/09/15 职场文书
2014年客房部工作总结
2014/11/22 职场文书
2015年城管个人工作总结范文
2015/04/20 职场文书
大学生十八大感想
2015/08/11 职场文书
MySQL存储过程及语法详解
2022/08/05 MySQL