python序列化_json,pickle,shelve模块
序列化
序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes
- 把内存数据 转成字符,叫序列化
- 把字符 转成内存数据,叫反序列化
模块 json
json.dumps() 序列化一个对象
import json
data = {
'roles':[
{'role':'monster','type':'pig','life':50},
{'role':'hero','type':'关羽','life':80},
]
}
d = json.dumps(data) #转成字符串
print(type(d))
print(d)
打印结果:
<class 'str'>
{"roles": [{"role": "monster", "type": "pig", "life": 50}, {"role": "hero", "type": "\u5173\u7fbd", "life": 80}]}
json.lodads() 从一个对象加载数据
import json
data = {
'roles':[
{'role':'monster','type':'pig','life':50},
{'role':'hero','type':'关羽','life':80},
]
}
d = json.dumps(data) #仅转成字符串
d2 = json.loads(d)
print(type(d2),d2)
#<class 'dict'>
#{'roles': [{'role': 'monster', 'type': 'pig', 'life': 50}, {'role': 'hero', 'type': '关羽', 'life': 80}]}
json.dump() 将一个对象序列化存入文件
import json
data = {
'roles':[
{'role':'monster','type':'pig','life':50},
{'role':'hero','type':'关羽','life':80},
]
}
f = open('test.json',mode='w')
json.dump(data, f) #转成字符并写入文件
结果:会将 data中的数据写入文件

json.load() 从一个打开的文件句柄加载数据
import json
f = open('test.json','r')
data = json.load(f)
print(data['roles'])
打印:
[{'role': 'monster', 'type': 'pig', 'life': 50}, {'role': 'hero', 'type': '关羽', 'life': 80}]
import json
f = open('json_file.json','w',encoding='utf-8')
data1 = {'name':'nurato','skill':'螺旋丸'}
data2 = [1,2,3,'sunshine']
json.dump(data1, f)
json.dump(data2, f)
结果:

说明: 可以dump多次数据并写入文件
我们现在json.load 一下
f = open('json_file.json','r',encoding='utf-8')
json.load(f)
# 程序报错:json.decoder.JSONDecodeError
只load 一次,并且json格式有问题,会报错
------------------------------------------------分割线------------------------------------------------
模块pickle
import pickle
data1 = {'name':'nurato','skill':'螺旋丸'}
f = open('data.pkl','wb')
pickle.dump(data1,f)
结果:创建了一个 名为 data.pkl 的文件
import pickle
f = open('data.pkl','rb')
d = pickle.load(f)
print(type(d))
print(d)
#<class 'dict'>
#{'name': 'nurato', 'skill': '螺旋丸'}
关于json 和 pickle
JSON:
优点:跨语言、体积小
缺点:只能支持int\str\list\tuple\dict
Pickle:
优点:专为python设计,支持python所有的数据类型
缺点:只能在python中使用,存储数据占空间大
---------------------------------------分割线-------------------------------------------
序列化 shelve 模块
import shelve
f = shelve.open('shelve_test') #打开一个文件
names = ['python', 'html', 'java']
info = {'name': 'jack', 'age': 25}
f['names'] = names
f['info_dic'] = info
f.close()
结果:会创建 shelve_test 文件
import shelve
f = shelve.open('shelve_test') #打开一个文件
print(list(f.keys())) #['names', 'info_dic']
print(list(f.items())) #[('names', ['python', 'html', 'java']), ('info_dic', {'name': 'jack', 'age': 25})]
print(f.get('names')) #['python', 'html', 'java']
print(f.get('info_dic')) #{'name': 'jack', 'age': 25}
增加内容:
import shelve
f = shelve.open('shelve_test') #打开一个文件
f['book'] = [1,2,3,4,5] #增加内容
f.close()
f2 = shelve.open('shelve_test')
print(list(f2.keys())) # ['names', 'info_dic', 'book']
print(f2['book'])
我们来修改一下内容:(只能通过 f['book'] = [1,2,'肖申克的救赎',4,5]) 这样的方式重新赋值来更改
f['book'][0] = 'new book' 这样的方式是不可以的。
import shelve
f = shelve.open('shelve_test') # 打开一个文件
f['book'] = [1,2,'肖申克的救赎',4,5]
f.close()
f2 = shelve.open('shelve_test')
print(f2['book']) # [1, 2, '肖申克的救赎', 4, 5]
删除内容:
import shelve
f = shelve.open('shelve_test') #打开一个文件
del f['book']
f.close()
f2 = shelve.open('shelve_test')
print(list(f2.items()))
# 打印 : [('names', ['python', 'html', 'java']), ('info_dic', {'name': 'jack', 'age': 25})]
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 模块
一.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 ...
- Day 21 序列化模块_Json,Pickle,Shelve
序列化 , 数据类型,列表 元组, 字符串 只有字符串能被写入文件中. 能在网络上传输的只能是bytes - 字符串 把要传输的和要存储的内容转换成字符串. 字符串 转换回 要传输和存储的内容 序列化 ...
- Python序列化,json&pickle&shelve模块
1. 序列化说明 序列化可将非字符串的数据类型的数据进行存档,如字典.列表甚至是函数等等 反序列化,将通过序列化保存的文件内容反序列化即可得到数据原本的样子,可直接使用 2. Python中常用的序列 ...
- 12 python json&pickle&shelve模块
1.什么叫序列化 序列化是指把内存里的数据类型转变成字符串,以使其能存储到硬盘或通过网络传输到远程,因为硬盘或网络传输时只能接受bytes(字节) 2.用于序列化的两个模块,json和pickle ...
- Python学习 :json、pickle&shelve 模块
数据交换格式 json 模块 json (JavaScript Object Notation)是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读.尽管 json 是JavaScript的一个子 ...
随机推荐
- 项目搭建系列之三:SpringMVC框架下使用Ehcache对象、数据缓存
注明:该文章为以前写的文章,这里只更改了标题,无GitHub源码下载. 一.准备工作 如果已经成功搭建SpringMVC环境,那么就可以进入Ehcache的准备工作了.1.下载jar包 Ehca ...
- 调用WCF错误-There was no endpoint listening
问题描述: 今天在调用WCF服务时候出现了下面的错误. 原因: 调用服务的客户端ip设置成了固定ip.(至于固定ip为什么会导致这个错误,没能去研究) 解决方法: 将客户端ip设置成自动获取.
- Sql server 0x80131904
这是一个比较让人纠结的错误. 背景:添加了网站的分支,要拿一个现有的数据库做一个新的数据库的东东. 首先就是还原备份,然后做代码的修改.然而在登录的时候报了这个错误.0x80131904 什么插入的列 ...
- Linux 网络(连接)相关参数作用
参考: [1] http://bbs.chinaunix.net/thread-2318039-1-1.html Backlog net.core.netdev_max_backlog = 1000 ...
- html5 嵌入元素 img map areaiframe embed meter object meter
<img src="路径"> src 路径可以是img.jpg 也可以是 绝对和相对路径+img.jpg <img src="路径 ...
- 标头停止点不能位于宏或#if块中.
使用VS2010在项目中编写C++头文件**.h时提示: PCH 警告: 标头停止点不能位于宏或#if块中 原因:vs2010的智能感知要求.h必须以非#if系列的预编译指令打头 正确方法:将所有含有 ...
- 安装lombok(eclipse)
下载 lombok.jar (https://projectlombok.org/download.html) 将 lombok.jar 放在eclipse安装目录下,和 eclipse.ini 文件 ...
- bit_count
bit_count函数的含义 用来计算二进制数中包含1的个数. select BIT_COUNT(10); 因为10转成二进制是1010,所以该结果就是2. bit_or函数的含义 就是对两个二进制数 ...
- solidity语言1
合约(contract)由变量(variable).函数(functions).函数修饰符(function modifiers).事件(events).结构体类型(struct type).枚举类型 ...
- 如何用css将一个div设置为一个圆
直接上代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> ...