一 什么是序列化

序列化指的是将内存中的数据结构转化为一种中间格式,并存储到硬盘上。

(反序列化:将硬盘上存储的中间格式数据再还原为内存中的数据结构)

二 为什么要序列化

  1. 持久保持状态

需知一个软件/程序的运行就是处理一系列状态的变化,在编程语言中,‘状态‘会以各种有结构的数据类型(也可以称之为变量)的形式保存在内存中。

内存是无法永久保存数据的,当程序运行了一段时间,我们断电或者重启程序,内存中关于这个程序之前一段时间的数据都会被清空。

在断电或重启程序之前将程序当前运行的数据保存下来,便于下次程序执行能够从文件中载入之前的数据,然后继续执行,这就是序列化。

  1. 数据跨平台交互

序列化数据之后,不仅可以把序列化后的内容写入硬盘,还可以通过网络传输到别的机器上,如果收发的双方约定都使用一种序列化的格式,那么便打破了平台和语言带来的限制,实现了跨平台交互。

反过来,把变量内从从序列化的对象重新读到内存里称之为反序列化,即unpicking。

三 序列化数据的三个模块

一 pickle模块

pickle模块时python内置的用来序列化python数据格式的模块,支持序列化python中所有的数据类型,主要方法有四个;

  1. dumps
import pickle
name = 'musibii'
age = 18
height = 1.7
user = {'name': name, 'age': age, 'height': height}
with open('userinfo.pkl', 'wb') as f:
userbytes = pickle.dumps(user)
f.write(userbytes)
  1. loads
import pickle
with open('userinfo.pkl', 'rb') as f:
userbytes = f.read()
user = pickle.loads(userbytes)
print(user)

与dumps和loads对应的两个方法更简单。

  1. dump
import pickle
with open('userinfo.pkl', 'wb') as f:
pickle.dump(user, f)
  1. load
import pickle
with open('userinfo.pkl', 'rb') as f:
user = pickle.load(f)
print(user)

二 shelve模块

shevlve模块也用于序列化,它和pickle模块不同的地方在于,不需要关心文件模式,直接把数据当成字典来看待。而且shelve模块可以直接对数据进行修改,而不用覆盖之前的数据,但pickle要想修改的话只能使用wb模式覆盖

shelve只有一个方法open,所以使用起来也很方便。同样的,shelve也支持python中所有的数据格式。

import shelve
user = {'name': 'musibii'}
s = shelve.open('userdb.shv')
s['user'] = user
s.close()

三 json模块

1 json是什么

JSON是Java script object notation的缩写,翻译过来就是js对象标识法。

对于开发者而言,json是一种通用的数据格式,任何语言都能解析,所以每种语言都会有处理json格式数据的需求。

  1. json语法
js 中的数据类型  python数据类型 的对应关系
{} 字典
[] list
string "" str
int/float int/float
true/false True/False
null None
  1. json格式的语法规范

最外层通常是一个字典或列表

{}or[],如果想定义json格式的数据,那么最外层直接写{},而且json中的字符串必须是双引号,json理论上可以嵌套任意多的层次。

2 为什么用json

虽然之前的pickle和shelve都很强大,而且使用也非常方便,那么为什么还出来json呢?这是因为pickle和shevle序列化之后的数据只有python才能解析出来,而通常在实际生产开发中,都是需要数据可以跨平台使用的。

3 json的使用

json模块的核心方法

  • dump
  • dumps
  • load
  • loads

不带s的直接封装了write和read方法。

  1. dump
import json
jsontext = """{
"users": [{
"name": "musibii",
"age": 18
},
{
"name": "thales",
"age": 23
}
]
}"""
with open('a.json', 'wt', encoding='utf-8') as f:
json.dump(jsontext, f)
  1. dumps
import json
jsontext = """{
"users": [{
"name": "musibii",
"age": 18
},
{
"name": "thales",
"age": 23
}
]
}"""
with open('a.json', 'wt', encoding='utf-8') as f:
f.write(json.dumps(jsontext))
  1. load
import json
with open('a.json', 'rt', encoding='utf-8') as f:
print(json.load(f))
  1. loads
import json
with open('a.json', 'rt', encoding='utf-8') as f:
res = json.loads(f.read())
print(res)

python模块之pickle、shelve、json的更多相关文章

  1. python 基础之pickle 与json 报错问题解决方案

    Python 基础之pickle与json 有没有在搞pickle与json在进行数据储存的时候老是报错,这个有些让人烦恼,在之前有一篇介绍过它们的基本用法以及在使用过长中避免一些坑,但是今天在把对象 ...

  2. Python 常用模块(2) 序列化(pickle,shelve,json,configpaser)

    主要内容: 一. 序列化概述 二. pickle模块 三. shelve模块 四. json模块(重点!) 五. configpaser模块 一. 序列化概述1. 序列化: 将字典,列表等内容转换成一 ...

  3. 各类模块的粗略总结(time,re,os,sys,序列化,pickle,shelve.#!json )

    ***collections 扩展数据类型*** ***re 正则相关操作 正则 匹配字符串*** ***time 时间相关 三种格式:时间戳,格式化时间(字符串),时间元组(结构化时间).***`` ...

  4. python 序列化 pickle shelve json configparser

    1. 什么是序列化 我们把变量从内存中变成可存储或传输的过程称之为序列化. 序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上. 反过来,把变量内容从序列化的对象重新读到内存里称 ...

  5. Day 21 序列化模块_Json,Pickle,Shelve

    序列化 , 数据类型,列表 元组, 字符串 只有字符串能被写入文件中. 能在网络上传输的只能是bytes - 字符串 把要传输的和要存储的内容转换成字符串. 字符串 转换回 要传输和存储的内容 序列化 ...

  6. 序列化模块之 pickle 和 json

    用于序列化的两个模块: json,用于字符串 和 python数据类型间进行转换 pickle,用于python特有的类型 和 python的数据类型间进行转换 Json模块提供了四个功能:dumps ...

  7. Python模块之pickle(列表,字典等复杂数据类型与二进制文件的转化)

    1.pickle模块简介 The pickle module implements binary protocols for serializing and de-serializing a Pyth ...

  8. python序列化_json,pickle,shelve模块

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

  9. 序列化模块组 pickle,json , xml , shelve , configparser

    序列化是什么? 序列化指的是将内存中的数据结构转化为一种中间格式 并存储到硬盘上. 反序列化是什么? 将硬盘上存储的中间格式数据再还原为内存中的数据结构. 为什么要有序列化? 是为了将数据持久存储 较 ...

随机推荐

  1. Springfox与swagger的整合使用

    一.前言 让我们先理一下springfox与swagger的关系. swagger是一个流行的API开发框架,这个框架以“开放API声明”(OpenAPI Specification,OAS)为基础, ...

  2. Centos7 网络报错Job for iptables.service failed because the control process exited with error code.

    今天在进行项目联系的时候,启动在待机的虚拟机,发现虚拟机的网络设置又出现了问题. 我以为像往常一样重启网卡服务就能成功,但是它却报了Job for iptables.service failed be ...

  3. ICO图标下载地址

    http://findicons.com/ http://www.iconfont.cn/

  4. js every some 遍历函数理解

    1.every let arr = [0, 1, 2, 3, 4, 5]; let result = arr.every((item, index) => { return item >= ...

  5. 华为SSH认证配置

    [设备型号]华为switch-S5700s ————1: [SW1] rsa/dsa local-key-pair create #创建本地密钥对 The key name will be: SW1_ ...

  6. Android中监控USB的插拔

    一.需求 在Android应该开发过程中,用到了USB通讯,需要应用监控USB设备的插入和拔出,从而刷新USB设备列表. 二.实现 在使用时,需要register和unregister. 通过UsbD ...

  7. repo跟svn的区别

    Git与SVN区别 Git和SVN正好相反,git提倡开发时拉分支,各干各的,相互独立,发版本时打标签:而svn呢,平时大家都在主干上干活,发版本时拉个分支,所以呢,svn经常会提交冲突,经常要合并代 ...

  8. 升讯威微信营销系统开发实践:所见即所得的微官网( 完整开源于 Github)

    GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction因为个人精力时间有限,不会再对现有代码进行更新维护,不过微信接口比较稳定,经测试至 ...

  9. 51nod OJ P1000 A+B

    P1000 A+B OJ:51Nod 链接:"http://www.51nod.com/Challenge/Problem.html#!#problemId=1000" 题目描述: ...

  10. 安装owncloud作为自己的云服务器

    环境:centos7,php5.6.37,apache2.4.6 首先,环境都要搭好,与之前搭wordpress网站是一样的.接下来下载程序 wget https://download.ownclou ...