1. 序列化说明

  序列化可将非字符串的数据类型的数据进行存档,如字典、列表甚至是函数等等
  反序列化,将通过序列化保存的文件内容反序列化即可得到数据原本的样子,可直接使用

2. Python中常用的序列化有json和pickle两种,区别如下

  json:只可序列化简单的数据类型,如字典、列表等,其他语言也有json,即json可跨语言进行序列和反序列化
  pickle:python独有的序列化,可序列化一切数据,以二进制的形式保存
  python中json和pickle的用法基本上是一模一样的

  注意:无论是json还是pickle,都只可序列化数据一次

3. json&pickle序列化

# -*- coding:utf-8 -*-
# Author:Wong Du dict = {'name':'wong','age':'23'}
# with open('test','w') as f:
# f.write(dict)
### 报错:TypeError: write() argument must be str, not dict '''
### 把字典用json序列化后写入文件
### json.dumps(obj); json.dump(obj, fp)
### f.write(json.dumps(dict)) == json.dump(dict,f)
'''
import json
with open('test','w') as f:
# f.write(json.dumps(dict))
json.dump(dict,f)
### 成功写入 '''pickle序列化'''
import pickle
def foo():
print("In the foo...")
foo()
with open('test2','wb') as f: #以二进制字节类型写入到文件当中,所以mode = 'wb'
# f.write(pickle.dumps(foo))
pickle.dump(foo,f)
### 写入成功!注意,这里的写入是把foo函数对象写入到文件当中,反序列化后,当代码里没有foo函数对象,则会报错 list = [1,2,3,4,'name']
with open('test3','wb') as f:
# f.write(pickle.dumps(list))
pickle.dump(list,f)

4. json&pickle反序列化

# -*- coding:utf-8 -*-
# Author:Wong Du # with open('test','r') as f:
# print(f.read())
# f.read()['name']
### 报错:TypeError: string indices must be integers '''
### json反序列化读取文件内容,可直接获取到字典,进行元素调用
### json.loads(str); line = json.load(fp)
### line = json.loads(f.read()) == line = json.load(f)
'''
import json
with open('test','r') as f:
# line = json.loads(f.read())
line = json.load(f)
print(type(line))
print(line['age'])
### 成功调用
'''
输出:
<class 'dict'>
23
''' import pickle
def foo():
print("In the foo2...")
with open('test2','rb') as f: #以二进制字节类型读取文件内容,所以mode = 'rb'
# line = pickle.loads(f.read())
line = pickle.load(f)
line() with open('test3','rb') as f:
# line = pickle.loads(f.read())
line = pickle.load(f)
print(type(line))
print(line[4])

5. shelve模块序列化的使用

  shelve模块可序列化数据多次

# -*- coding:utf-8 -*-
# Author:Wong Du '''
shelve模块可多次序列化并能简单的找到其中对应的数据
即shelve模块以字典的形式进行k和v的关键字对应数据序列化
''' import shelve dict = {'name':'wong','age':'23','sox':'man'}
list = ['you','happy','jiu','OK']
f1 = open('高并发socket_client.py') # 序列化数据
with shelve.open('shelve.txt') as f:
f['dict'] = dict
f['list'] = list
f['file'] = f1.read() # 调用shelve序列化的数据
with shelve.open('shelve.txt') as f:
print(f['dict'])
print(f['dict']['name'])
print(f['file'])

Python序列化,json&pickle&shelve模块的更多相关文章

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

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

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

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

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

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

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

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

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

  6. Python全栈之路----常用模块----序列化(json&pickle&shelve)模块详解

    把内存数据转成字符,叫序列化:把字符转成内存数据类型,叫反序列化. Json模块 Json模块提供了四个功能:序列化:dumps.dump:反序列化:loads.load. import json d ...

  7. 12 python json&pickle&shelve模块

      1.什么叫序列化 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes(字节) 2.用于序列化的两个模块,json和pickle ...

  8. Python json & pickle & shelve模块

    json & pickle 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇 ...

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

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

随机推荐

  1. OO_JAVA_表达式求导

    OO_JAVA_表达式求导_第一弹 ---------------------------------------------------表达式提取部分 词法分析 ​ 首先,每一个表达式内部都存在不可 ...

  2. Spring Cloud Gateway 网关限流

    Spring Cloud Gateway 限流 一.背景 二.实现功能 三.网关层限流 1.使用默认的redis来限流 1.引入jar包 2.编写配置文件 3.网关正常响应 4.网关限流响应 2.自定 ...

  3. Prometheus之告警规则的编写

    Prometheus之告警规则的编写 一.前置知识 二.需求 三.实现步骤 1.编写告警规则 2.修改prometheus.yml执行告警规则的位置 3.配置文件截图 4.页面上看告警数据信息 5.查 ...

  4. nio之缓冲区(Buffer)理解

    一.缓冲区简介 Nio中的 Buffer 是用于存储特定基础类型的一个容器.为了能熟练的使用 Nio中的各种 Buffer , 我们需要理解 Buffer 中的 三个重要 的属性. 1. capaci ...

  5. 『学了就忘』Linux基础 — 9、虚拟机中快照的使用

    目录 1.快照的含义 2.快照的使用 步骤一:创建拍摄快照 步骤二:填写快照信息并创建 步骤三:查看快照 步骤四:操作快照 3.管理虚拟机小技巧 4.关于快照说明 快照和克隆是VMware中两个非常实 ...

  6. Vue 基础自查——watch、computed和methods的区别

    1 前言 创建一个Vue实例时,可以传入一个选项对象 const vm = new Vue({ data: { msg: 'hello' }, computed: {}, methods: {}, w ...

  7. Docker容器间网络互联原理,讲不明白算我输....

    @ 目录 一.今天我们要搞明白的实验 二.前置网络知识 2.1.docker默认为我们创建的网络 2.2.怎么理解docker0网桥 2.3.什么是veth-pair技术? 三.同一个局域网中不同主机 ...

  8. Git+windows安装教程(一)

    一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...

  9. 解决tomcat的404问题

    遇到的问题 点击startup.bat启动tomcat启动成功,但在网页上输入local:8080却显示Access Error: 404 -- Not Found Cannot locate doc ...

  10. 微信小程序(六)

    MINA 框架: 启动: 冷启动,热启动 加载: 生命周期 路由: 事件: 事件时视图层到逻辑层的通信方式 事件可以将用户的行为反馈到逻辑层进行处理 事件可以绑定在组件上,触发事件后就会执行逻辑层对应 ...