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实现递归遍历文件夹并删除文件
Apr 18 Python
Python解惑之True和False详解
Apr 24 Python
python+selenium实现登录账户后自动点击的示例
Dec 22 Python
python实现AES加密与解密
Mar 28 Python
Python进阶:生成器 懒人版本的迭代器详解
Jun 29 Python
python批量解压zip文件的方法
Aug 20 Python
Django框架 Pagination分页实现代码实例
Sep 04 Python
python实现百度OCR图片识别过程解析
Jan 17 Python
Python random模块制作简易的四位数验证码
Feb 01 Python
python实现猜数游戏(保存游戏记录)
Jun 22 Python
python实战之一步一步教你绘制小猪佩奇
Apr 22 Python
python井字棋游戏实现人机对战
Apr 28 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 防止表单重复提交两种实现方法
2016/11/03 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
javascript打印大全(打印页面设置/打印预览代码)
2013/03/29 Javascript
javascript中的window.location.search方法简介
2013/09/02 Javascript
jQuery Trim去除字符串首尾空字符的实现方法说明
2014/02/11 Javascript
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
谈谈jQuery Ajax用法详解
2015/11/27 Javascript
基于jQuery实现收缩展开功能
2016/03/18 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
2016/09/06 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成"...")
2016/11/28 Javascript
javascript基础知识之html5轮播图实例讲解(44)
2017/02/17 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
2017/03/27 jQuery
bootstrap3使用bootstrap datetimepicker日期插件
2017/05/24 Javascript
利用原生的JavaScript实现简单拼图游戏
2018/11/18 Javascript
[03:10]2014DOTA2 TI马来劲旅Titan首战告捷目标只是8强
2014/07/10 DOTA
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
教你用Python创建微信聊天机器人
2020/03/31 Python
python爬虫_实现校园网自动重连脚本的教程
2018/04/22 Python
使用Python进行目录的对比方法
2018/11/01 Python
用Python编写一个简单的CS架构后门的方法
2018/11/20 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
2019/08/20 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
日本民宿预约平台:STAY JAPAN
2017/07/01 全球购物
DOUGLAS荷兰:购买香水和化妆品
2020/10/24 全球购物
亚马逊意大利站点:Amazon.it
2020/12/31 全球购物
网络教育毕业生自我鉴定
2013/10/10 职场文书
医院深入开展党的群众路线教育实践活动实施方案
2014/08/27 职场文书
2014年十一国庆节爱国演讲稿
2014/09/23 职场文书
2014党员整改措施思想汇报
2014/10/07 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
班委竞选稿范文
2015/11/21 职场文书
浅析Python实现DFA算法
2021/06/26 Python
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
2022/06/01 Java/Android