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自定义scrapy中间模块避免重复采集的方法
Apr 07 Python
python实现用户登陆邮件通知的方法
Jul 09 Python
在Django中使用Sitemap的方法讲解
Jul 22 Python
Python实现的求解最大公约数算法示例
May 03 Python
用python写扫雷游戏实例代码分享
May 27 Python
pandas 转换成行列表进行读取与Nan处理的方法
Oct 30 Python
对Python实现累加函数的方法详解
Jan 23 Python
python操作日志的封装方法(两种方法)
May 23 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
Aug 24 Python
如何安装2019Pycharm最新版本(详细教程)
Sep 26 Python
Scrapy框架基本命令与settings.py设置
Feb 06 Python
Python matplotlib 利用随机函数生成变化图形
Apr 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中用header图片地址 简单隐藏图片源地址
2008/04/09 PHP
linux下删除7天前日志的代码(php+shell)
2011/01/02 PHP
PHP sprintf()函数用例解析
2011/05/18 PHP
强制PHP命令行脚本单进程运行的方法
2014/04/15 PHP
浅谈PHP中try{}catch{}的使用方法
2016/12/09 PHP
Yii框架引用插件和ckeditor中body与P标签去除的方法
2017/01/19 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
2019/12/13 PHP
jscript之Open an Excel Spreadsheet
2007/06/13 Javascript
js 采用delete实现继承示例代码
2014/05/20 Javascript
javascript arguments使用示例
2014/12/16 Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
2017/03/21 jQuery
Vue 过渡实现轮播图效果
2017/03/27 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
使用electron将vue-cli项目打包成exe的方法
2018/09/29 Javascript
javascript使用正则表达式实现注册登入校验
2020/09/23 Javascript
Vue中nprogress页面加载进度条的方法实现
2020/11/13 Javascript
Python使用smtplib模块发送电子邮件的流程详解
2016/06/27 Python
matlab中实现矩阵删除一行或一列的方法
2018/04/04 Python
python 定时任务去检测服务器端口是否通的实例
2019/01/26 Python
python 用pandas实现数据透视表功能
2020/12/21 Python
pycharm 实现光标快速移动到括号外或行尾的操作
2021/02/05 Python
详解Html5原生拖拽操作
2018/01/12 HTML / CSS
印度网上药店:1mg
2017/10/13 全球购物
纽约复古灵感的现代珠宝品牌:Lulu Frost
2018/03/03 全球购物
以太网Ethernet IEEE802.3
2013/08/05 面试题
《乞巧》教学反思
2014/02/27 职场文书
大学生职业生涯规划书
2014/03/14 职场文书
年会搞笑主持词
2014/03/27 职场文书
护士演讲稿优秀范文
2014/04/30 职场文书
清洁工个人总结
2015/03/04 职场文书
建国大业观后感
2015/06/01 职场文书
开学第一周值周总结
2015/07/16 职场文书
初中生入团申请书范文(五篇)
2019/10/16 职场文书
详解JS ES6编码规范
2021/05/07 Javascript
使用 Apache 反向代理的设置技巧
2022/01/18 Servers