序列化 pickle & json & shelve
把内存数据转成字符,叫序列化,dump,dumps
把字符转成内存数据类型,叫反序列化load,loads
dumps:仅转成字符串
dump不仅能把对象转换成str,还能直接存到文件内
json.dumps json.loads
1.把你的内存数据,通过网络,共享给远程其他人
2.定义了不同语言之间的交互规则
a.纯文本,缺点:不能共享复杂的数据类型,比如字典
b.xml ,缺点:占空间大
c.json,优点,简单,可读性好
- json:
- 支持的数据类型:str,int,tuple,list,dict
- 跨平台,跨语言,体积小
- pickle:
- 支持python所有的数据类型
- 只能在python中使用,存储数据占空间大
- dumps 转换为bytes,写到硬盘后是pickle自己的格式,不可直接读,看着像是乱码,其实不是
- json序列化时是将数据转成字符串形式
- pickle序列化时是将数据转成字节形式,在读写文件时必须是以二进制的方式进行读写,‘rb’,‘wb’
import json,pickle
data = {'a':1,'b':2}
pickle_dumps_data = pickle.dumps(data)
print(type(pickle_dumps_data),pickle_dumps_data)
#<class 'bytes'>
# b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02K\x02u.'
pickle_loads_data = pickle.loads(pickle_dumps_data)
print(type(pickle_loads_data),pickle_loads_data)
#<class 'dict'> {'a': 1, 'b': 2}
json_dumps_data = json.dumps(data)
print(type(json_dumps_data),json_dumps_data)
# <class 'str'>{"a": 1, "b": 2}
json_loads_data = json.loads(json_dumps_data)
print(type(json_loads_data),json_loads_data)
# <class 'dict'> {'a': 1, 'b': 2}
shelve 对pickle进行封装,可进行多次dump,load,只能在python中使用,以k_v结构写入文档,每次dump都要写K
import shelve
f = shelve.open("shelve_test")
names = ["alex","rain","test"]
info = {"names":"alex","age":22}
f["names"] = names
f["info_dic"] = info
f.close()
#获取数据
# f = shelve.open("shelve_test")
# print(list(f.keys()))#['names', 'info_dic']
# print(list(f.items()))#[('names', ['alex', 'rain', 'test']), ('info_dic', {'names': 'alex', 'age': 22})]
# print(f.get("names"))#['alex', 'rain', 'test']
# print(f.get("info_dic"))#{'names': 'alex', 'age': 22}
#修改数据,重新给K复制
# f = shelve.open("shelve_test")
# f["names"] = ["Alex","Rain","Test"]
# f.close()
# f = shelve.open("shelve_test")
# print(f.get("names"))#['Alex', 'Rain', 'Test']
#删除数据
# f = shelve.open("shelve_test")
# del f["info_dic"]
# f.close()
# f = shelve.open("shelve_test")
# print(f.get("info_dic"))#None #添加数据
# f = shelve.open("shelve_test")
# f["scores"] = [1,2,3,4,5]
# f.close()
# f = shelve.open("shelve_test")
# print(f.get("scores"))#[1, 2, 3, 4, 5]
序列化 pickle & json & shelve的更多相关文章
- 第二十二天- 序列化 pickle json shelve
# 序列化:存储或传输数据时,把对象处理成方便存储和传输的数据格式,这个过程即为序列化# Python中序列化的三种方案:# 1.pickle python任意数据——>bytes写入⽂件:写好 ...
- python模块--pickle&json&shelve
使用file文件处理时,写入的必须是str ,否则会报错. 例如:要把一个字典写入文件,写入时会报错 ,就算转换成str格式写入,读取的时候也不能按照dict格式读. >>> inf ...
- Python:序列化 pickle JSON
序列化 在程序运行的过程中,所有的变量都储存在内存中,例如定义一个dict d=dict(name='Bob',age=20,score=88) 可以随时修改变量,比如把name修改为'Bill',但 ...
- python3之序列化(pickle&json&shelve)
1.pickle模块 python持久化的存储数据: python程序运行中得到了一些字符串,列表,字典等数据,想要长久的保存下来,方便以后使用,而不是简单的放入内存中关机断电就丢失数据.python ...
- python序列化之pickle,json,shelve
模块 支持方法 说明 json dumps/dump loads/load 只能处理基本数据类型: 用于多种语言间的数据传输: pickle dumps/dump loads/load 支持pytho ...
- day21 pickle json shelve configpaser 模块
1. 序列化:我们在网络传输的时候,需要我们对对象进行处理,把对象处理成方便存储和传输的格式,这个过程就叫序列化 序列化的方法不一定一样,三十目的都是为了方便储存和传输. 在python中有三种序列化 ...
- python之路 序列化 pickle,json
运行代码,毫不留情地得到一个TypeError: Traceback (most recent call last): ... TypeError: <__main__.Student obje ...
- Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式
Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式 目录 Pycharm使用技巧(转载) Python第一天 安装 shell 文件 Py ...
- Python之数据序列化(json、pickle、shelve)
本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型,其中面向对象的编程语言还允许开发者自定义数据类型(如:自定义类),Py ...
随机推荐
- Volley解析(一)--Volley的使用
Volley解析(一)--Volley的使用 Volley 是一个HTTP协议的网络请求框架 Volley的优势: 自动安排网络请求 支持多个并发网络连接 具有标准HTTP缓存一致性的透明磁盘和内存响 ...
- C++ string 类型提取字符串
在某些情况下需要对输入的字符串进行处理,提取其中的需要的信息. 比如在linux中输入"mkdir test",新建test文件夹,就需要提取其中的test字符. 提取的方法需要b ...
- javaSe-线程
package com.java.chap09.sec02; public class Thread1 extends Thread{ private int baoZi=1; private Str ...
- Securityonion介绍
下载地址 https://github.com/Security-Onion-Solutions/security-onion/blob/master/Verify_ISO.md ...
- 编写C#程序,自动将bing首页图片设为壁纸
任务目标: 1,获取图片 2,设为壁纸 3,自动化 环境需求: .NET Framework 4.0+, Visual Studio 2017 ==================== 1,获取图片 ...
- python基础教程总结5——函数
1.函数创建 1).函数代码块以def关键词开头,后接函数标识符名称和圆括号()2).任何传入参数和自变量必须放在圆括号中间.圆括号之间可以用于定义参数3).函数的第一行语句可以选择性地使用文档字符串 ...
- UVA 10905 Children's Game (贪心)
贪心,假如任意给出一个序列,如果两两交换了以后会变大,那么就交换,直到不能交换为止. #include<bits/stdc++.h> using namespace std; ; stri ...
- HTML5中的webSocket、ajax、http
本文原链接:https://cloud.tencent.com/developer/article/1115496 https://cloud.tencent.com/developer/articl ...
- git clone 和 download 不一样,能用git clone 就用git clone,download的代码,经常出现安装bug
git clone 和 download 不一样,能用git clone 就用git clone,download的代码,经常出现安装bug
- 队列的add与offer的区别
两个方法都表示往队列里添加元素 但是当出现异常时,add方法抛出异常 而offer则返回的是false,就是啥事也没有,也不抛异常,也没有添加成功!