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呀,至今很多传统公司如金融行业的很多系统的 ...
随机推荐
- RK3288 GPIO
简介GPIO, 全称 General-Purpose Input/Output(通用输入输出),是一种软件运行期间能够动态配置和控制的通用引脚.RK3288有9组 GPIO bank: GPIO0,G ...
- FlatList 核心运用
<FlatList data={this.state.stuList} renderItem={this._renderItem} keyExtactor={this._keyExtractor ...
- winform 所遇
主程序调用客程序: 方法一: Process.Start( System.Windows.Forms.Application.StartupPath + "\\SelfUpdate.exe& ...
- Ubuntu安装之python开发
Ubuntu安装之python开发 什么??公司要用Ubuntu(乌班图)?不会用??怎么进行python开发??? 乌班图操作系统下载地址:http://releases.ubuntu.com/ ...
- Oracle提取中文字符串拼音首字母函数
通过oracle的NLSSORT函数对汉字按照拼音排序,然后根据汉字的区间返回对应的首字母. 效果1,获取拼音简码: 效果2,获取姓名首字母: 创建函数: /* 获取拼音简码函数 */ CREATE ...
- vue中父子组件的通信
1.父组件向子组件传递数据 父组件传递:data = parent.data 子组件接收props: {data:{}} 2.子组件向父组件传递数据(https://vuefe.cn/v2/guide ...
- nopcommerce 4.1 core 学习 增加商城配置属性
需求: 原本是想用nop 来做国际版的商城,可以像亚马逊那样 国内外通用, 专门增加一个跨进元素属性. 学习里面的一些架构思想. 国内的行情还是 像himall 会比较实用. 这是在商城的综合 ...
- redis应用--HyperLogLog
如果你负责开发维护一个大型的网站,有一天老板找产品经理要网站每个网页每天的 UV 数据,然后让你来开发这个统计模块,你会如何实现? 如果统计 PV 那非常好办,给每个网页一个独立的 Redis 计数器 ...
- react native进一步学习(NavigatorIOS 学习)
特别申明:本人代码不作为任何商业的用途,只是个人学习的一些心得,为了使得后来的更多的程序员少走一些弯路.*(如若侵犯你的版权还望见谅)*. 开发工具:WebStorm,xcode 1. rn的创建的时 ...
- Redis操作1
本文章内容节选自<PHP MVC开发实战>一书第16.4.2章节. 一.概述 Redis是一个NoSQL数据库,由于其数据类型的差异,所以要在MVC框架中实现CURD操作,比较繁锁.事实上 ...