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 dict 字典 以及 赋值 引用的一些实例(详解)
Jan 20 Python
python 3.6.2 安装配置方法图文教程
Sep 18 Python
5款Python程序员高频使用开发工具推荐
Apr 10 Python
NumPy 数组使用大全
Apr 25 Python
解决Django加载静态资源失败的问题
Jul 28 Python
python redis 批量设置过期key过程解析
Nov 26 Python
Python实现银行账户资金交易管理系统
Jan 03 Python
Pytest mark使用实例及原理解析
Feb 22 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
Aug 22 Python
如何通过安装HomeBrew来安装Python3
Dec 23 Python
Python实现信息轰炸工具(再也不怕说不过别人了)
Jun 11 Python
Python内置包对JSON文件数据进行编码和解码
Apr 12 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
在DC的漫画和电影中,蝙蝠侠的宿敌,小丑的真名是什么?
2020/04/09 欧美动漫
使用dump函数,给php加断点测试
2013/06/25 PHP
学习php中的正则表达式
2014/08/17 PHP
smarty模板引擎中自定义函数的方法
2015/01/22 PHP
php计算指定目录下文件占用空间的方法
2015/03/13 PHP
PHP 实现的将图片转换为TXT
2015/10/21 PHP
PHP实现ASCII码与字符串相互转换的方法
2017/04/29 PHP
得到文本框选中的文字,动态插入文字的js代码
2007/03/07 Javascript
网页自动刷新,不产生嗒嗒声的一个解决方法
2007/03/27 Javascript
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
使用IE6看老赵的博客 jQuery初探
2010/01/17 Javascript
JQuery1.6 使用方法三
2011/11/23 Javascript
Javascript 检测键盘按键信息及键码值对应介绍
2013/01/03 Javascript
JS截取字符串常用方法详细整理
2013/10/28 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
理解JavaScript原型链
2016/10/25 Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
2017/03/31 Javascript
详解webpack-dev-server使用http-proxy解决跨域问题
2018/01/13 Javascript
JS查找孩子节点简单示例
2019/07/25 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
python中字典dict常用操作方法实例总结
2015/04/04 Python
python读取LMDB中图像的方法
2018/07/02 Python
详解爬虫被封的问题
2019/04/23 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
Python模块 _winreg操作注册表
2020/02/05 Python
python实现遍历文件夹图片并重命名
2020/03/23 Python
VIVOBAREFOOT赤脚鞋:让您的脚做自然的事情
2017/06/01 全球购物
拉斯维加斯酒店、演出、旅游、俱乐部及更多:Vegas.com
2019/02/28 全球购物
学校元旦晚会方案
2014/02/19 职场文书
社区消防工作实施方案
2014/03/21 职场文书
文明班集体申报材料
2014/05/23 职场文书
义卖募捐活动总结
2015/05/09 职场文书
MySQL EXPLAIN输出列的详细解释
2021/05/12 MySQL
vue 实现上传组件
2021/05/31 Vue.js