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中lambda函数 list comprehension 和 zip函数使用指南
Sep 28 Python
Python全局变量操作详解
Apr 14 Python
python开发之文件操作用法实例
Nov 13 Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
Dec 24 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
Jun 11 Python
Python CVXOPT模块安装及使用解析
Aug 01 Python
python字符串替换re.sub()方法解析
Sep 18 Python
Python hashlib模块实例使用详解
Dec 24 Python
python获取依赖包和安装依赖包教程
Feb 13 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
Feb 28 Python
爬虫代理的cookie如何生成运行
Sep 22 Python
Python基于tkinter canvas实现图片裁剪功能
Nov 05 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中auto_prepend_file与auto_append_file用法实例分析
2014/09/22 PHP
php 开发中加密的几种方法总结
2017/03/22 PHP
Mac下php 5升级到php 7的步骤详解
2017/04/26 PHP
php实现的生成迷宫与迷宫寻址算法完整实例
2017/11/06 PHP
js 通用javascript函数库整理
2011/08/14 Javascript
jQuery实现可编辑的表格实例讲解(2)
2015/09/17 Javascript
基于jquery实现日历签到功能
2020/09/11 Javascript
JavaScript引用类型和基本类型详解
2016/01/06 Javascript
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
2016/03/11 Javascript
HTML页面定时跳转方法解析(2种任选)
2016/12/22 Javascript
angular中实现控制器之间传递参数的方式
2017/04/24 Javascript
angularjs+bootstrap实现自定义分页的实例代码
2017/06/19 Javascript
javaScript日期工具类DateUtils详解
2017/12/08 Javascript
解决vue项目打包后提示图片文件路径错误的问题
2018/07/04 Javascript
ES6中new Function()语法及应用实例分析
2020/02/19 Javascript
vue任意关系组件通信与跨组件监听状态vue-communication
2020/10/18 Javascript
简单介绍Python中的readline()方法的使用
2015/05/24 Python
利用Python脚本实现ping百度和google的方法
2017/01/24 Python
Python开发的实用计算器完整实例
2017/05/10 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
2018/04/18 Python
python验证码识别教程之滑动验证码
2018/06/04 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
2019/07/11 Python
Python代码生成视频的缩略图的实例讲解
2019/12/22 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
会计与审计专业大专生求职信
2013/10/03 职场文书
职业生涯规划书范文
2014/03/10 职场文书
电子信息专业应届生自荐信
2014/06/04 职场文书
保险公司开门红口号
2014/06/21 职场文书
国企干部对照检查材料
2014/08/22 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
超市工作总结范文2014
2014/12/19 职场文书
计算机考试作弊检讨书1000字
2015/01/01 职场文书
2015小学语文教师个人工作总结
2015/05/20 职场文书
2015年小学体育工作总结
2015/05/22 职场文书