把内存数据转成字符,叫序列化;把字符转成内存数据类型,叫反序列化。

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)模块详解的更多相关文章

  1. Python全栈之路----常用模块----hashlib加密模块

    加密算法介绍 HASH       Python全栈之路----hash函数 Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列 ...

  2. Python全栈之路----常用模块----re 模块

    正则表达式就是字符串的匹配规则,在多数编程语言里都有相应的支持,python里对应的模块是 re. re的匹配语法有以下几种 re.match 从头开始匹配 re.search 匹配包含 re.fin ...

  3. Python全栈之路----常用模块----shutil模块

    高级的 文件.文件包.压缩包 处理模块   参考Python之路[第四篇]:模块     #src是原文件名,fdst是新文件名 shutil.copyfileobj(fsrc, fdst[, len ...

  4. Python全栈之路----常用模块学习----模块的种类和导入方法

    什么是模块? 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码 ...

  5. Python全栈之路----常用模块----软件开发目录规范

    目录基本内容 log  #日志目录 conf  #配置目录 core/luffycity  #程序核心代码目录  #luffycity 是项目名,建议用小写 libs/modules  #内置模块 d ...

  6. Python全栈之路----常用模块----logging模块

    很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...

  7. Python全栈之路----常用模块----subprocess模块

    我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程,通过python调用系统命令或脚本的模块在python ...

  8. Python全栈之路----常用模块----datetime模块详解

    相比于time模块,datetime模块的接口则更直观,更容易调用. datetime模块定义了下面这几个类: datetime.date:表示日期的类,常用的属性有year,month,day: d ...

  9. Python全栈之路----常用模块----xml处理模块

    xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的 ...

随机推荐

  1. ng-packagr 不能全部打包文件

    1.没有在public_api.ts中导出 export * from './src/app/ngprime/components/tooltip/tooltip.module'; export * ...

  2. javaEE完整体系结构

    学习之前了解熟悉一下javaEE的完整体系结构会更有助于理解 https://segmentfault.com/a/1190000007090110

  3. Maskrcnn遇到的坑

    第一个要讲maskrcnn 中keras 升到2.1 然后 在线程问题上要把workers设置成1,是否使用线程设置成false 然后调用模型的时候要把模型和加载文件放到一个目录下

  4. FORTH 发展(部分)

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  5. 设计模式-builder(构造器模式)

    好处: 多个属性时,可以清楚明了知道属性, 重叠构造起器的安全性和JavaBeans模式的可读性 只需要制定需要建造的类型就可以得到他们 实例: public class NutritionFacts ...

  6. cocoaPods安装爬坑总结

    1.移除现有Ruby默认源 $ gem sources --remove https://rubygems.org/   2.使用新的源 $ gem sources -a https://ruby.t ...

  7. Ubuntu16.04 ionic(jdk,sdk,gradle)环境搭建完全攻略

    在Ubuntu16.04当中搭建一个ionic环境还是按照官方教程的来,主要问题是首先要把JDK,SDK搭好,环境变量配好.本文中给的包的下载请不要直接用浏览器下载,很慢,尽量用wget 下载,重要的 ...

  8. anytime

    #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<sys/time.h> ...

  9. maven的依赖特性

    若排版紊乱可查看我的个人博客原文地址 maven的依赖特性很多很杂,这里大概总结一下,maven的依赖特性主要是依赖范围和传递依赖,前者会影响后者,这篇文章会介绍传递依赖的传递原则,出现冲突传递依赖默 ...

  10. STL中set的使用方法

    第一次想认真地学学set,是在我做一题treap的时候产生的念头.(HNOI2004 宠物收养场,洛谷P2286) 嗯,虽然学过一丢丢的treap和splay,但是这编程复杂度貌似有点高…… 无奈翻开 ...