Python序列化模块JSON与Pickle


Posted in Python onJune 05, 2022

序列化把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening。

一、JSON序列化

使用json序列化能够达到跨平台传输数据的目的。

跨平台性质,它可以序列化dict/list/str/int/float/bool/None数据类型。

序列化成json文本格式。

1、json数据类型和python数据类型对应关系表:

Json类型<——>Python类型

  • {}<——>dict
  • []<——>list, tuple
  • "string"<——>str, unicode
  • 520.13<——>int, long, float
  • true/false<——>True/False
  • null<——>None

2、相关函数

(2)序列化

  • 序列化成字符串:json.dumps(json_obj)
  • 序列化字符串到文件中:json.dump(json_obj, write_file, [,protocol])

(2)反序列化

  • 反序列化成对象:json.loads(json_str)
  • 从文件读流中反序列化成对象:json.load(read_file)

3、举例:

import json

struct_data = {'name': 'json', 'age': 23, 'sex': 'male'}
print(struct_data, type(struct_data))  # {'name': 'json', 'age': 23, 'sex': 'male'} 
# 序列化
data = json.dumps(struct_data)
print(data, type(data))  # {"name": "json", "age": 23, "sex": "male"} 

# 反序列化
data = json.loads(data)
print(data, type(data))  # {'name': 'json', 'age': 23, 'sex': 'male'}

磁盘文件操作

import json

# 序列化,写入磁盘
with open('Json序列化对象.json', 'w') as fw:
    json.dump(struct_data, fw)

# 从文件读取,反序列化
with open('Json序列化对象.json') as fr:
    data = json.load(fr)
print(data)  # {'name': 'json', 'age': 23, 'sex': 'male'}

二、Pickle序列化

pickle无法跨平台,序列化之后只有python识别。但是可以序列化Python的任意数据类型,包括函数和对象。

Json模块和picle模块都有 dumps、dump、loads、load四种方法,而且用法一样。但是序列化成二进制形式。

1、举例:

import pickle

struct_data = {'name': 'json', 'age': 23, 'sex': 'male'}
print(struct_data, type(struct_data))  # {'name': 'json', 'age': 23, 'sex': 'male'} 

data = pickle.dumps(struct_data)
print(data, type( data))  # b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00jsonq\x02X\x03\x00\x00\x00ageq\x03K\x17X\x03\x00\x00\x00sexq\x04X\x04\x00\x00\x00maleq\x05u.' 

data = pickle.loads(data)
print(data, type(data))  # {'name': 'json', 'age': 23, 'sex': 'male'} 'dict'>

# 序列化(注意:pickle模块需要使用二进制存储,即'wb'模式存储)
with open('Pickle序列化对象.pkl', 'wb') as fw:
    pickle.dump(struct_data, fw)

# 反序列化
with open('Pickle序列化对象.pkl', 'rb') as fr:
    pickle = pickle.load(fr)
print(data)  # {'name': 'json', 'age': 23, 'sex': 'male'}

2、base64与pickle联合使用

str = 'Hello World'  # 加密前,原始数据
a = base64.b64encode(pickle.dumps(str)).decode()  # 加密
print(a) # gANYCwAAAEhlbGxvIFdvcmxkcQAu
b = pickle.loads(base64.b64decode(a.encode()))  # 解密
print(b)

到此这篇关于Python序列化模块JSON与Pickle的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。


Tags in this post...

Python 相关文章推荐
Python日期操作学习笔记
Oct 07 Python
Django使用httpresponse返回用户头像实例代码
Jan 26 Python
Python3使用正则表达式爬取内涵段子示例
Apr 22 Python
解决Mac安装scrapy失败的问题
Jun 13 Python
Python列表与元组的异同详解
Jul 02 Python
使用python实现数组、链表、队列、栈的方法
Dec 20 Python
django实现将后台model对象转换成json对象并传递给前端jquery
Mar 16 Python
Python脚本导出为exe程序的方法
Mar 25 Python
python中adb有什么功能
Jun 07 Python
如何用python 操作zookeeper
Dec 28 Python
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
Mar 29 Python
Python中time与datetime模块使用方法详解
Mar 31 Python
python 判断字符串当中是否包含字符(str.contain)
Python测试框架pytest高阶用法全面详解
Python使用Web框架Flask开发项目
Jun 01 #Python
numpy array找出符合条件的数并赋值的示例代码
Jun 01 #Python
 python中的元类metaclass详情
May 30 #Python
Python自动化实战之接口请求的实现
Python中的 enumerate和zip详情
May 30 #Python
You might like
php下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
工厂模式在Zend Framework中应用介绍
2012/07/10 PHP
单点登录 Ucenter示例分析
2013/10/29 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
php函数serialize()与unserialize()用法实例
2014/11/06 PHP
PHP数组常用函数实例小结
2018/08/20 PHP
javascript 不间断的图片滚动并可点击
2010/01/15 Javascript
javascript 嵌套的函数(作用域链)
2010/03/15 Javascript
JQuery入门——用one()方法绑定事件处理函数(仅触发一次)
2013/02/05 Javascript
引用外部脚本时script标签关闭的写法
2014/01/20 Javascript
jQuery对象的selector属性用法实例
2014/12/27 Javascript
Vue基于NUXT的SSR详解
2017/10/24 Javascript
JS中async/await实现异步调用的方法
2019/08/28 Javascript
javascript实现画板功能
2020/04/12 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
原生js生成图片验证码
2020/10/11 Javascript
[08:44]和酒神一起战斗 DOTA2教你做大人
2014/03/27 DOTA
玩转python爬虫之URLError异常处理
2016/02/17 Python
5款非常棒的Python工具
2018/01/05 Python
浅谈flask中的before_request与after_request
2018/01/20 Python
python爬虫基本知识
2018/03/05 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
印度最好的在线药品订购网站:PharmEasy
2018/11/30 全球购物
迪卡侬印尼体育用品商店:Decathlon印尼
2020/03/11 全球购物
类成员函数的重载、覆盖和隐藏区别
2016/01/27 面试题
高中毕业自我鉴定
2013/12/16 职场文书
高三历史教学反思
2014/01/09 职场文书
股份合作协议书范本
2014/04/14 职场文书
法学专业毕业生自荐信
2014/06/11 职场文书
法定代表人身份证明书(含说明)
2014/10/02 职场文书
先进工作者事迹材料
2014/12/23 职场文书
对公司的意见和建议
2015/06/04 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
nginx常用命令放入shell脚本详解
2021/03/31 Servers
python自动化测试通过日志3分钟定位bug
2021/11/20 Python