序列化:

序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes.

反序列化:

把字符转成内存里的数据类型.

用于序列化的两个模块.他们的使用方法完全一样.

  • json,用于字符串 和 python数据类型间进行转换
  • pickle,用于python特有的类型 和 python的数据类型间进行转换

Json模块提供了四个功能:dumps、dump、loads、load

pickle模块提供了四个功能:dumps、dump、loads、load

为什么要序列化?

你打游戏过程中,打累了,停下来,关掉游戏、想过2天再玩,2天之后,游戏又从你上次停止的地方继续运行,你上次游戏的进度肯定保存在硬盘上了,是以何种形式呢?游戏过程中产生的很多临时数据是不规律的,可能在你关掉游戏时正好有10个列表,3个嵌套字典的数据集合在内存里,需要存下来?你如何存?把列表变成文件里的多行多列形式?那嵌套字典呢?根本没法存。所以,若是有种办法可以直接把内存数据存到硬盘上,下次程序再启动,再从硬盘上读回来,还是原来的格式的话,那是极好的。

常用方法:

 import json,pickle
date = {
'name':{'name':'alex','age':22, 'salary':99999}
} d = json.dumps(date) # 把date中的数据序列化.转成字符串
d2 = json.loads(d) # 把字符串反序列化成内存里的类型.
print(d2['name']) # 输出name的value值,{'age': 22, 'name': 'alex', 'salary': 99999}.说明反序列化成功了
print(type(d))
f = open("test.json", "w")
json.dump(date,f) # 把date数据序列化并写入到一个文件对象中.
f = open("test.json", "r") # 打开要被反序列化的文件
date1 = json.load(f) # 把一个文件对象反序列化.可以从文件中读取
print(date1["name"]) '''
序列化,可以dump多次,但是不能load多次!
把数据类型转成字符串存到内存里的意义?
1.把你的内存数据通过网络共享给别人.
2.跨平台.定义了不同语言之间的交互规则. ''' pk = open("data.pkl","wb") # 写入方式是wb
# print(pickle.dumps(date)) # 序列化date中的数据,以bytes数据类型展现
pickle.dump(date,pk)
d = open('data.pkl', "rb")
d1 = pickle.load(d) # 反序列化data.pkl中的数据
print(d1) # {'name': {'name': 'alex', 'salary': 99999, 'age': 22}}

json和pickle的区别:

JSON:

优点:跨语言、体积小

缺点:只能支持int\str\list\tuple\dict

Pickle:

优点:专为python设计,支持python所有的数据类型

缺点:只能在python中使用,存储数据占空间大

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式.

刚刚我讲了.json和pickle不能dump和load多次.那么不同的数据类型,我们就得要存到多个文件中.这样很麻烦.因此,python提供了一个shelve的模块.可以支持dump和load多次.

只能在python中使用.

 import shelve
date = {
'name':{'name':'alex','age':22, 'salary':99999}
} list = ["abc","bbc","cbc"] f = shelve.open("shelve_test")
f["names"] = date
f["li"] = list
f['names'] = {'name': {'name': 'alex', 'age': 22, 'salary': 99}} # 只能通过这种方式修改.把99999改成了99
# 然后f支持被持久化的数据类型的各种操作(这里的2个数据类型是字典和列表,所以f就支持字典和列表的增删改查

一般在python里 shelve可以代替pickle

Day 4-5 序列化 json & pickle &shelve的更多相关文章

  1. python学习之文件读写,序列化(json,pickle,shelve)

    python基础 文件读写 凡是读写文件,所有格式类型都是字符串形式传输 只读模式(默认) r  f=open('a.txt','r')#文件不存在会报错 print(f.read())#获取到文件所 ...

  2. Python(序列化json,pickle,shelve)

    序列化 参考:https://www.cnblogs.com/yuanchenqi/articles/5732581.html # dic = str({'1':'111'}) # # f = ope ...

  3. 序列化 json pickle shelve configparser

    一 什么是 序列化 在我们存储数据或者 网络传输数据的时候,需要对我们的 对象进行处理,把对象处理成方便我们存储和传输的 数据格式,这个过程叫序列化,不同的序列化,结果也不相同,但是目的是一样的,都是 ...

  4. python序列化: json & pickle & shelve 模块

    一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...

  5. python 全栈开发,Day25(复习,序列化模块json,pickle,shelve,hashlib模块)

    一.复习 反射 必须会 必须能看懂 必须知道在哪儿用 hasattr getattr setattr delattr内置方法 必须能看懂 能用尽量用__len__ len(obj)的结果依赖于obj. ...

  6. day6_python序列化之 json & pickle & shelve 模块

    一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...

  7. 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 ...

  8. 常用模块(random,os,json,pickle,shelve)

    常用模块(random,os,json,pickle,shelve) random import random print(random.random()) # 0-1之间的小数 print(rand ...

  9. Pythoy 数据类型序列化——json&pickle 模块

    Pythoy 数据类型序列化--json&pickle 模块 TOC 什么是序列化/反序列化 pickle 模块 json 模块 对比json和pickle json.tool 命令行接口 什 ...

随机推荐

  1. 转://因触发器限制导致oracle用户登录失败

    使用PL/SQL DEV登录数据库时,出现如下错误 手工创建了test用户,通过dev工具登录没问题.怀疑数据库中有些用户限制了登录的.再看错误编号:ORA-20001,oracle保留的异常错误号范 ...

  2. Python:Day04

    数学运算符: +  加 -  减 *  乘 **  指数运算 /  除 //  整除 %  取余 比较运算符: >  大于 <  小于 >=  大于等于 <=  小于等于 == ...

  3. mysql 查看当前使用的配置文件my.cnf的方法

    my.cnf是mysql启动时加载的配置文件,一般会放在mysql的安装目录中,用户也可以放在其他目录加载. 安装mysql后,系统中会有多个my.cnf文件,有些是用于测试的. 使用locate m ...

  4. HotSpot虚拟机对象探秘(对象创建,对象内存布局,对象访问定位)

    以常用的HotSpot虚拟机和JAVA内存区域堆为例,探讨对象的创建,对象的内存布局以及对象的访问定位 一.对象的创建 1)类加载:虚拟机遇到一条new指令时,先检测这个指令的参数能否在常量池中定位到 ...

  5. face detection[FaceBoxes]

    该文来自<FaceBoxes: A CPU Real-time Face Detector with High Accuracy>.该文时间线是2018年1月 虽然人脸检测上随着深度学习的 ...

  6. 编程从入门到放弃(Java)

      1.Java入门篇 1.1 基础入门和面向对象 1.1.1 编程基础 [01] Java语言的基本认识 [02] 类和对象 [03] 类的结构和创建对象 [04] 包和访问权限修饰符 [05] 利 ...

  7. odoo常用widget

      widget=”statusbar” 头部状态条标签widget=”email” 电子邮件地址标签widget=”selection” 下拉选择标签widget=”mail_followers” ...

  8. 基于Vue.js 2.0 + Vuex打造微信项目

    一.项目简介 基于Vue + Vuex + Vue-router + Webpack 2.0打造微信界面,实现了微信聊天.搜索.点赞.通讯录(快速导航).个人中心.模拟对话.朋友圈.设置等功能. 二. ...

  9. outlook署名最后一行没换行

    Outlook のプレーン テキスト形式での投稿で改行が削除されます 1.通过更改outlook默认设置可以解决 https://support.microsoft.com/ja-jp/help/28 ...

  10. Entity Framework Core系列之什么是Entity Framework Core

    前言 Entity Framework Core (EF Core)是微软推荐的基于.NET Core framework的应用程序数据访问技术.它是轻量级,可扩展并且支持跨平台开发.EF Core是 ...