19-[模块]-json/pickle、shelve
1.序列化?
序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes
(1)把字典保存到文件
data = {
'roles': [
{'role': 'monster', 'type': 'pig', 'life': 50},
{'role': 'hero', 'type': 'dog', 'life': 80},
]
} f = open('game_status', 'w')
f.write(str(data))
(2)把字典从文件中读出来
f = open('game_status', 'r')
data = f.read()
dic = eval(data)
print(dic)
2.json
用于序列化的两个模块
- json,用于字符串 和 python数据类型间进行转换
- pickle,用于python特有的类型 和 python的数据类型间进行转换
Json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load
Dumps 只是变成str
Dump 还可以存入文件
import json data = {
'roles': [
{'role': 'monster', 'type': 'pig', 'life': 50}, {'role': 'hero', 'type': 'dog', 'life': 80},
]
} d = json.dumps(data) #仅转换为字符串
print(d, type(d)) d2 = json.loads(d) # 将数据从字符串转化为原来的格式
print(d2['roles']) # 运行结果
{"roles": [{"role": "monster", "type": "pig", "life": 50}, {"role": "hero", "type": "dog", "life": 80}]} <class 'str'>
[{'role': 'monster', 'type': 'pig', 'life': 50}, {'role': 'hero', 'type': 'dog', 'life': 80}]
import json data = {
'roles': [
{'role': 'monster', 'type': 'pig', 'life': 50}, {'role': 'hero', 'type': 'dog', 'life': 80},
]
} f = open('json_1', 'w')
json.dump(data, f) # 把dict数据写入文件
f.close() f = open('json_1', 'r')
data = json.load(f) # 把数据从文件读出,并且转换为原来的格式
print(data['roles']) # 运行结果
[{'life': 50, 'role': 'monster', 'type': 'pig'}, {'life': 80, 'role': 'hero', 'type': 'dog'}]
3.pickle
(1)json对不同数据类型操作
# 写入文件
import json
f = open('json_2', 'w')
d1 = {'name': 'alex', 'age': 22}
l1 = [1, 2, 3, 4, 'dfa']
json.dump(d1, f)
json.dump(l1, f) #文件内容
{"name": "alex", "age": 22}[1, 2, 3, 4, "dfa"]
(2)pickle
import pickle
d1 = {'name': 'alex', 'age': 22}
d = pickle.dumps(d1) # 转换为bytes
print(d) # 运行结果
b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00alexq\x02X\x03\x00\x00\x00ageq\x03K\x16u.'
import pickle
d1 = {'name': 'alex', 'age': 22}
l1 = [1, 2, 3, 4, 'dfa'] f = open('pick_1', 'wb')
pickle.dump(d1,f) #dump写入文件
pickle.dump(l1,f)
import pickle f = open('pick_1', 'rb')
data = pickle.load(f)
print(data) #运行结果
{'name': 'alex', 'age': 22}
- 不能dump load 多次
(3)函数也可以pickle 序列化
import pickle def sayhi():
print('hi') data = pickle.dumps(sayhi)
print(data) #结果
b'\x80\x03c__main__\nsayhi\nq\x00.'
4.JSON VS Pickle
JSON:
优点:跨语言、体积小
缺点:只能支持int\str\list\tuple\dict
Pickle:
优点:专为python设计,支持python所有的数据类型
缺点:只能在python中使用,存储数据占空间大
5.shelve模块
shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式
(1)序列化
import shelve f = shelve.open('shelve_test') # 打开一个文件 names = ["alex", "rain", "test"]
info = {'name': 'alex', 'age': 22} f["names"] = names # 持久化列表
f['info_dic'] = info f.close()
(2)反序列化
import shelve d = shelve.open('shelve_test') # 打开一个文件 print(d['names'])
print(d['info_dic']) #del d['test'] #还可以删除
In [1]: import shelve In [2]: f = shelve.open('shelve_test') In [3]: f
Out[3]: <shelve.DbfilenameShelf at 0x36f5190> In [4]: f.
f.cache f.dict f.keyencoding f.popitem f.update
f.clear f.get f.keys f.setdefault f.values
f.close f.items f.pop f.sync f.writeback In [4]: f.keys()
Out[4]: KeysView(<shelve.DbfilenameShelf object at 0x036F5190>) In [5]: list(f.keys())
Out[5]: ['names', 'info_dic'] In [7]: list(f.items())
Out[7]:
[('names', ['alex', 'rain', 'test']),
('info_dic', {'age': 22, 'name': 'alex'})] In [8]: f.get('names')
Out[8]: ['alex', 'rain', 'test'] In [9]: f.get('info_dic')
Out[9]: {'age': 22, 'name': 'alex'} In [10]: f['names'][1]
Out[10]: 'rain' In [12]: f.close()
In [9]: f['names']
Out[9]: ['alex', 'rain', 'test'] In [11]: f['names'][1]
Out[11]: 'rain' In [12]: f['names'][1] = 'RAIN' # 修改不成功 In [13]: f['names']
Out[13]: ['alex', 'rain', 'test'] In [14]: f['names']=[1,2,3] #这样修改 In [15]: f['names']
Out[15]: [1, 2, 3] In [16]: del f['names'] 删除 In [17]: f.get('names')
4
5
19-[模块]-json/pickle、shelve的更多相关文章
- python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则
python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess ...
- python 全栈开发,Day25(复习,序列化模块json,pickle,shelve,hashlib模块)
一.复习 反射 必须会 必须能看懂 必须知道在哪儿用 hasattr getattr setattr delattr内置方法 必须能看懂 能用尽量用__len__ len(obj)的结果依赖于obj. ...
- python模块--json \ pickle \ shelve \ XML模块
一.json模块 之前学习过的eval内置方法可以将一个字符串转成一个python对象,不过eval方法时有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,e ...
- 模块 - json/pickle/shelve/xml/configparser
序列化: 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes. 为什么要序列化: 有种办法可以直接把内存数据(eg:10个列表,3 ...
- python开发模块基础:序列化模块json,pickle,shelve
一,为什么要序列化 # 将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化'''比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给?现在我们能想到的方法就是存在文 ...
- python序列化模块 json&&pickle&&shelve
#序列化模块 #what #什么叫序列化--将原本的字典.列表等内容转换成一个字符串的过程叫做序列化. #why #序列化的目的 ##1.以某种存储形式使自定义对象持久化 ##2.将对象从一个地方传递 ...
- python_ 模块 json pickle shelve
一,什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代码( ...
- 常用模块(json/pickle/shelve/XML)
一.json模块(重点) 一种跨平台的数据格式 也属于序列化的一种方式 介绍模块之前,三个问题: 序列化是什么? 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化. 反序列化又是什么? 将 ...
- 保存数据到文件的模块(json,pickle,shelve,configparser,xml)_python
一.各模块的主要功能区别 json模块:将数据对象从内存中完成序列化存储,但是不能对函数和类进行序列化,写入的格式是明文. (与其他大多语言交互的类型) pickle模块:将数据对象从内存中完成序列 ...
- python序列化: json & pickle & shelve 模块
一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...
随机推荐
- Oracle EBS AR 事务处理到期余额总计API
declare -- Local variables here i integer; x_line_original NUMBER; x_line_remaining NUMBER; ...
- flask的g对象
故名思议我们可以理解这个g对象是一个全局的对象,这个对象存储的是我们这一次请求的所有的信息,只是存储这一次的请求 g:global 1. g对象是专门用来保存用户的数据的. 2. g对象在一次请求中 ...
- 测试TextKit渲染大文本的效率
测试TextKit渲染大文本的效率 TextKit可以用来做精美的电子书,而电子书通常都是txt格式的,那么渲染txt格式的文本的效率如何呢? 以下来进行测试. #import "RootV ...
- Linux vim命令详解
vi: o 处于下一行编辑模式 A 处于编辑的后面 ==>END gg 文件的开头 98gg 跳转到第98行 Shift + G 文件结尾 $ 文件行结尾 ^ 文件行开头 ==> ...
- Linux file命令详解
file: 查看文件类型 file常见命令参数 Usage: file [OPTION...] [FILE...] Determine type of FILEs. --help display th ...
- zabbix对网卡流量超出添加阈值
给网卡设置流量阈值: 配置告警路径: Configuration--Templates--Template OS Linux--Discovery--Network interface discove ...
- zhuangxiu
红宝石家居广场国际家居馆 党湾综合市场(青年文明路)
- 开源作业调度框架 - Quartz.NET - 实战使用1
简介: 第一步:下载Quartz.NET 下载Quartz.NET只需要打开网址选择适宜的版本进行下载解压缩即可. 目前最新版本是2.3.3,压缩包为6MB,不过鉴于国内网速.我还是加一下博客园的下载 ...
- OpenStack虚拟机快照和增量备份实现
1 快照的概念一般对快照的理解就是能够将系统还原到某个瞬间,这就是快照的作用.快照针对要保存的数据分为内存快照和磁盘快照,内存快照就是保存当前内存的数据,磁盘快照就是保存硬盘的数据.快照针对保存方式又 ...
- ECharts 定制 label 样式
起因 实现对 label 的样式定制,自定义字体颜色.大小等属性:效果如下图 实现 itemStyle: { normal: { color: '#f7ba0e', label: { ...