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基于动态规划算法计算单词距离
Jul 25 Python
Python制作简单的网页爬虫
Nov 22 Python
利用python微信库itchat实现微信自动回复功能
May 18 Python
pandas通过索引进行排序的示例
Nov 16 Python
django基于restframework的CBV封装详解
Aug 08 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
Aug 12 Python
python内存管理机制原理详解
Aug 12 Python
Django之模板层的实现代码
Sep 09 Python
tensorflow实现二维平面模拟三维数据教程
Feb 11 Python
Python-for循环的内部机制
Jun 12 Python
用ldap作为django后端用户登录验证的实现
Dec 07 Python
Matlab求解数组中的最大值及它所在的具体位置
Apr 16 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
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
把77A收信机改造成收音机
2021/03/02 无线电
使用 php4 加速 web 传输
2006/10/09 PHP
PHP图片验证码制作实现分享(全)
2012/05/10 PHP
php计算多维数组中所有值总和的方法
2015/06/24 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
2020/02/07 PHP
javascript 自动转到命名锚记
2009/01/10 Javascript
JavaScript 滚轮事件使用说明
2010/03/07 Javascript
ExtJs纵坐标值重复问题的解决方法
2014/02/27 Javascript
浅谈jQuery中ajaxPrefilter的应用
2016/08/01 Javascript
headjs实现网站并行加载但顺序执行JS
2016/11/29 Javascript
node.js入门教程之querystring模块的使用方法
2017/02/27 Javascript
详解Webpack DLL用法以及功能
2017/07/11 Javascript
js防刷新的倒计时代码 js倒计时代码
2017/09/06 Javascript
js 获取json数组里面数组的长度实例
2017/10/31 Javascript
详解如何在webpack中做预渲染降低首屏空白时间
2018/08/22 Javascript
Angular刷新当前页面的实现方法
2018/11/21 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
2019/08/07 Javascript
js实现简单的打印表格
2020/01/15 Javascript
vue实现微信浏览器左上角返回按钮拦截功能
2020/01/18 Javascript
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
答题辅助python代码实现
2018/01/16 Python
基于多进程中APScheduler重复运行的解决方法
2019/07/22 Python
Python实现检测文件的MD5值来查找重复文件案例
2020/03/12 Python
Python使用Excel将数据写入多个sheet
2020/05/16 Python
使用BeautifulSoup4解析XML的方法小结
2020/12/07 Python
英国著名的药妆网站:Escentual
2016/07/29 全球购物
关于工资低的辞职信
2014/01/14 职场文书
军校本科大学生自我评价
2014/01/14 职场文书
中学家长会邀请函
2014/02/03 职场文书
调解协议书
2014/04/16 职场文书
三关爱志愿服务活动方案
2014/08/17 职场文书
2014年酒店工作总结与计划
2014/11/17 职场文书
文艺演出主持词
2015/07/01 职场文书