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呀,至今很多传统公司如金融行业的很多系统的 ...
随机推荐
- GDAL——命令使用专题——ogrinfo命令
GDAL——命令使用专题——ogrinfo命令 前言 GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库.它利用抽象 ...
- !/usr/bin/env python和!/usr/bin/python的区别
脚本语言第一行 作用:文件中代码用指定可执行程序运行 #!/usr/bin/Python 执行脚本时,调用/usr/bin下python解释器 #!/usr/bin/env python 在环境设 ...
- 三、Linux的目录结构:
root管理员的home目录root 其他用户的home目录home目录中
- Centos7 Firewall
1.1 firewall启停设置 [root@tomcat ~]# systemctl stop firewalld.service #关闭firewall [root@tomcat ~]# syst ...
- iptables介绍
iptables防火墙可以用于创建过滤(filter)与NAT规则.所有Linux发行版都能使用iptables. iptables的结构:iptables-->Tables-->Chai ...
- d3js可视化策略
d3js是数据驱动图形的思路.基本可以这么理解,有什么样的图形,后面基本就有类似结构的数据.大概思路步骤如下: 一.适配数据格式 这一步主要是为第二部服务,第一步的结果作为第二部的入参. 比如,画层级 ...
- 漫谈hashcode
概要 对于hashcode,相信很多朋友都不陌生,应为我们很多时候都需要用到这个,比如hashMap中就用到了,根据key的hash值来决定value存放的位置,之后来取得时候直接到指定的位置上那就行 ...
- ubuntu 16.04 安装 opencv +contrib (3.2.0) + python 3.5
环境: - ubuntu 16.04 - OpenCV + contrib 3.2.0 (文中附下载链接) - Python 3.5 基于其他环境的配置应该大同小异. 没时间解释了,直接上车. 更新下 ...
- java基础知识—抽象和封装
1.从现实中抽象出类的步骤: 1)找出它的种类--类名 2)找出它的属性--字段的名称 3)找出它的行为--方法名 2.抽象的原则:根据面向对象的思想抽象出类. 3.类图的好处:直观.容易理解. 4. ...
- Spring Factory
BeanFactory和FactoryBean均为接口: BeanFactory为IOC容器的创建提供了一个最底层的规范,主要方法包括contains(bean), getBean(class, be ...