Python序列化,json&pickle&shelve模块
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模块的更多相关文章
- Python(序列化json,pickle,shelve)
序列化 参考:https://www.cnblogs.com/yuanchenqi/articles/5732581.html # dic = str({'1':'111'}) # # f = ope ...
- python序列化_json,pickle,shelve模块
序列化 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes 把内存数据 转成字符,叫序列化 把字符 转成内存数据,叫反序列化 模块 ...
- python序列化: json & pickle & shelve 模块
一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...
- 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 ...
- day6_python序列化之 json & pickle & shelve 模块
一.json & pickle & shelve 模块 json,用于字符串 和 python数据类型间进行转换pickle,用于python特有的类型 和 python的数据类型间进 ...
- Python全栈之路----常用模块----序列化(json&pickle&shelve)模块详解
把内存数据转成字符,叫序列化:把字符转成内存数据类型,叫反序列化. Json模块 Json模块提供了四个功能:序列化:dumps.dump:反序列化:loads.load. import json d ...
- 12 python json&pickle&shelve模块
1.什么叫序列化 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes(字节) 2.用于序列化的两个模块,json和pickle ...
- Python json & pickle & shelve模块
json & pickle 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇 ...
- python学习之文件读写,序列化(json,pickle,shelve)
python基础 文件读写 凡是读写文件,所有格式类型都是字符串形式传输 只读模式(默认) r f=open('a.txt','r')#文件不存在会报错 print(f.read())#获取到文件所 ...
随机推荐
- [火星补锅] 非确定性有穷状态决策自动机练习题Vol.3 T3 && luogu P4211 [LNOI2014]LCA 题解
前言: 这题感觉还是很有意思.离线思路很奇妙.可能和二次离线有那么一点点相似?当然我不会二次离线我就不云了. 解析: 题目十分清真. 求一段连续区间内的所有点和某个给出的点的Lca的深度和. 首先可以 ...
- STL模板
目录 栈stack 队列queue 列表List 集合set 映射map 多重映射multimap 对pair 元组tuple 容器containers 算法algorithms 仿函数/函数对象fu ...
- Java并发:ReadWriteLock 读写锁
读写锁在同一时刻可以允许多个线程访问,但是在写线程访问,所有的读线程和其他写线程均被阻塞. 读写锁不像 ReentrantLock 那些排它锁只允许在同一时刻只允许一个线程进行访问,读写锁可以允许多个 ...
- .NET Core TLS 协议指定被我钻了空子~~~
前言 此前,测试小伙伴通过工具扫描,平台TLS SSL协议支持TLS v1.1,这不安全,TLS SSL协议至少是v1.2以上才行,想到我们早已将其协议仅支持v1.3,那应该非我们平台问题.我依然自信 ...
- linux shell 函数返回值问题(超过255)
最近再写一个shell测试的时候出现问题,函数返回值异常 用shell计算斐波那契数列数列,写了一个shell函数,然后调用的,验证的时候我只随便计算了几个数(10以内),确认结果是正确的就提交了,后 ...
- 运行级别和找回root密码
运行级别说明 0 :关机 1 :单用户 [类似安全模式,这个模式可以帮助找回root密码 2:多用户状态没有网络服务 3:多用户状态有网络服务 [使用] 4:系统未使用保留给用户 5:图形界面 6:系 ...
- git删除未被追踪的文件
# 先看看会删掉哪些文件,防止重要文件被误删 git clean -n # 删除 untracked files git clean -f # 连 untracked 的目录也一起删掉 git cle ...
- Linux Mem (目录)
1.用户态相关: 1.1.用户态进程空间的创建 - execve() 详解 1.2.用户态进程空间的映射 - mmap()详解 1.3.分页寻址(Paging/MMU)机制详解 2.内核态相关: 2. ...
- 第一天 python入门 基础 “”“Hello World”和if-elif的使用、数据类型
(1)第一个程序"""Hello World" 实现python环境打印输出:Hello World 程序: print("Hello World&q ...
- vue自定义指令实例使用(实例说明自定义指令的作用)
在写vue项目的时候,我们经常需要对后台返回的数据进行大量的渲染操作,其中就包含了大量的对特殊数据的进一步处理,比如说时间戳.图片地址.特殊数据显示等等特殊数据处理改进. 其实遇到这种情况,通过Vue ...