Python序列化模块JSON与Pickle
作者:springsnow 发布时间:2022-11-06 00:24:37
标签:Python,序列化,模块,JSON,Pickle
序列化把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在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)反序列化
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)
来源:https://www.cnblogs.com/springsnow/p/12524129.html
猜你喜欢
通过本接口可以查询圆通快递、申通快递、ems快递、韵达快递等快递单号查询信息,无需其他额外开发,非常方便首先到www.aikuaidi.cn
简介在SQL SERVER中,数据库在硬盘上的存储方式和普通文件在Windows中的存储方式没有什么不同,仅仅是几个文件而已.SQL SER
如何随机显示图片计数器?一切就绪,看看我们的代码:count.asp< html >< head >
CSS重设就是由于各种浏览器解释CSS样式的初始值有所不同,导致设计师在没有定义某个CSS属性时,不同的浏览器会按照自己的默认值来为没有定义
1.apache配置文件中打开vhost的配置LoadModule vhost_alias_module modules/mod_vhost
从AspJpeg1.8 版本开始,AspJpeg 提供了比 PrintText 更为灵活的文本绘图方法PrintTextEx,PrintTe
一、怎么样取得最新版本的MySQL?要安装MySQL,首先要当然要取得它的最新版本,虽然大家都知道在FreeBSD的Packages中可以找
自定义模板标签,过滤器。英文翻译是Customtemplatetagsandfilters。customfilter自定义过滤器今天不在我的
用Pyinstaller封装一个py文件时,过程没有问题,但打开后会出现闪退的现象。因此上网找,找到了上面网址所示的解决方法。也就是用cmd
在python中,它也有这个含义,不过有点区别的是,“当...时候”这个条件成立在一段范围或者时间间隔内,从而在这段时间间隔内让python
在Python2中datetime对象没有timestamp方法,不能很方便的生成epoch,现有方法没有处理很容易导致错误。关于Epoch
sql exist的妙用create table b(a varchar(10),b varchar(10),c varchar(10))i
Python 中的字典是Python中一个键值映射的数据结构,下面介绍一下如何优雅的操作字典.1.1 创建字典Python有两种方法可以创建
本文实例讲述了python连接字符串的方法。分享给大家供大家参考。具体如下:方法1:直接通过加号操作符相加foobar = 'foo
numpy的log和ln函数每次当我想用python实现ln函数时,下意识的就会输入错误的函数代码,这里特来记录一下关于numpy中的ln和
list1 和list2 两个list , 想要得到list1是不是包含 list2 (是不是其子集 )a = [1,2] b = [1,2
关于SQL查询效率,100w数据,查询只要1秒,与您分享:机器情况:p4: 2.4内存: 1 Gos: windows 2003数据库:SQ
本人python新手小白,记录学习过程中遇到的一些小问题。python 爬虫获取网页资源之前,联网是必须的,作为 python 中最常用的
一、初始化CounterCounter支持3种形式的初始化,比如提供一个数组,一个字典,或单独键值对“=”式赋值。具体初始化的代码如下所示:
导读:由于banner一般用于专题类网站,在门户网站的二级页面,用户进来之前,在首页已经对主题有一定的了解和认识,所以banner的作用是在