Python全栈之路----常用模块----序列化(json&pickle&shelve)模块详解
把内存数据转成字符,叫序列化;把字符转成内存数据类型,叫反序列化。
Json模块
Json模块提供了四个功能:序列化:dumps、dump;反序列化:loads、load。
import json data = {
'roles':[
{'role':'monster','type':'pig','life':50},
{'role':'hero','type':'关羽','life':80}
]
}
#dumps和loads
d = json.dumps(data) #仅转成字符串
d2 = json.loads(d)
#dump
f = open('test.json','w')
json.dump(data,f) #转成字符串后直接写入文件,文件名后默认加上 .json 来说明这个文件是通过json转过的
#load
f = open('test.json','r')
data = json.load(f)
只是把数据类型转成字符串存在内存里的意义? json.dumps json.loads
1.把你的内存数据 通过网络 共享给远程其他人,只能用bytes格式
2.定义了不同语言之间的交互规则
1.纯文本,坏处:不能共享复杂的数据类型
2.xml 坏处:占空间大
3.json 好处:简单,可读性好
注:dump 可以 dump 多次,但是在 dump 多次之后,不能 load,因为数据类型不同的时候,没有办法识别是什么数据类型,无法处理。
pickle模块
import pickle d = {'name':'alex','age':22}
l = [1,2,3,4,'rain']
#dumps
pickle.dumps(d) #d为bytes类型
#loads
d = pickle.dumps(d)
pickle.loads(d)
#dump
pk = open('data.pkl','wb')
pickle.dump(d,pk) #打开文件的时候,因为文件是bytes,必须以 'wb' 的格式打开
#load
f = open('data.pkl','rb')
d = pickle.load(f)
json VS pickle
Json:
优点:跨语言、体积小
缺点:只能支持int,str,list,tuple,dict
Pickle:
优点:专为python设计,支持python所有的数据类型
缺点:只能在python中使用(不能跨平台),存储数据占空间大
shelve 模块
shelve模块是一个简单的(k,v)将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式。
pycharm里写入:
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()
cmd里打开、获取
>>> import shelve
>>> f = shelve.open('shelve_test') #打开文件
>>> f.keys()
KeysView(<shelve.DbfilenameShelf object at 0x0000022D92FF7128>)
>>> list(f.keys())
['names', 'info_dic']
>>> list(f.items())
[('names', ['alex', 'rain', 'test']), ('info_dic', {'name': 'alex', 'age': 22})]
>>> f.get('names') #不会冲突,可以随意获取
['alex', 'rain', 'test']
>>> f.get('info_dic')
{'name': 'alex', 'age': 22}
>>> f['names']
['alex', 'rain', 'test']
>>> del f ['names'] #可以进行删除操作
>>> f.close() #删除后先关掉,再重新打开
>>> f = shelve.open('shelve_test')
>>> f.get('names')
>>> f['scores'] = [1,3,4,5,6] #可以添加
>>> f['scores']
[1, 3, 4, 5, 6]
>>> f['scores'] = [1,3,'A',5,6] #可以整个赋值,不能对其中的元素进行修改
>>> f['scores']
[1, 3, 'A', 5, 6]
Python全栈之路----常用模块----序列化(json&pickle&shelve)模块详解的更多相关文章
- Python全栈之路----常用模块----hashlib加密模块
加密算法介绍 HASH Python全栈之路----hash函数 Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列 ...
- Python全栈之路----常用模块----re 模块
正则表达式就是字符串的匹配规则,在多数编程语言里都有相应的支持,python里对应的模块是 re. re的匹配语法有以下几种 re.match 从头开始匹配 re.search 匹配包含 re.fin ...
- Python全栈之路----常用模块----shutil模块
高级的 文件.文件包.压缩包 处理模块 参考Python之路[第四篇]:模块 #src是原文件名,fdst是新文件名 shutil.copyfileobj(fsrc, fdst[, len ...
- Python全栈之路----常用模块学习----模块的种类和导入方法
什么是模块? 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码 ...
- Python全栈之路----常用模块----软件开发目录规范
目录基本内容 log #日志目录 conf #配置目录 core/luffycity #程序核心代码目录 #luffycity 是项目名,建议用小写 libs/modules #内置模块 d ...
- Python全栈之路----常用模块----logging模块
很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...
- Python全栈之路----常用模块----subprocess模块
我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程,通过python调用系统命令或脚本的模块在python ...
- Python全栈之路----常用模块----datetime模块详解
相比于time模块,datetime模块的接口则更直观,更容易调用. datetime模块定义了下面这几个类: datetime.date:表示日期的类,常用的属性有year,month,day: d ...
- Python全栈之路----常用模块----xml处理模块
xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的 ...
随机推荐
- MySql数据库通过idb和frm恢复
简单粗暴 恢复user表 1.先建立和之前user表一样的表结构.就是执行create table user .... ,执行完,数据库目录下就会建立user.ibd文件(当然还有其他的) 2.执行 ...
- python修炼第一天
Python修炼第一天 新的开始:不会Python的运维,人生是不完整的. 为了我的人生能够完整,所以我来了!今后跟着太白金星师傅学习功夫,记录一下心得,以便日后苦练. 一 Python的历史: Py ...
- 1ci
- BUG调试: Jump to the invalid address stated on the next line at 0x0: ???
gdb或者vlagrind报告: ==14569== Jump to the invalid address stated on the next line ==14569== at 0x0: ??? ...
- 多线程之 Runnable接口
一.多线程实现的第二种方式 1.定义类,实现Runnable接口 2.重写接口中的run方法,要在run方法中定义线程要执行的任务 public class MyRunnableImpl implem ...
- 在win中,给powershell客户端,搭建sshd服务器。
下载:https://github.com/PowerShell/Win32-OpenSSH/releases 问:为什么要用这个sshd?答:这是微软用,openssh官方的源码,源码网址: ...
- Selenium 工作原理
Selenium是ThoughtWorks公司研发的一个强大的基于浏览器的开源自动化测试工具,它通常用来编写web应用的自动化测试.早期也即Selenium1.x时期主要使用Selenium RC(S ...
- Redis操作1
本文章内容节选自<PHP MVC开发实战>一书第16.4.2章节. 一.概述 Redis是一个NoSQL数据库,由于其数据类型的差异,所以要在MVC框架中实现CURD操作,比较繁锁.事实上 ...
- 分析logfilter+session
1.P132分析: long before = System.currentTimeMillis(); //返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1 ...
- BUAAOO第二单元总结之电梯问题
---恢复内容开始--- Homework1 傻瓜电梯 程序架构 第一次题目非常简单,思考也非常简单,一部电梯傻瓜调度.将命令入公共的队列,电梯从公共队列中取命令即可,其中只需要使用ArrayBloc ...