python模块之序列化模块
序列化
"""
序列--字符串
序列化--其他数据类型转化为字符串数据类型
反序列化--字符串转化为其他数据类型
"""
json模块
"""
json 五星好评 数字 字符串 列表 字典 元组
优点:通用的序列化格式
缺点:只有很少的一部分数据类型-->字符串
"""
1,dumps和loads
import json
# dumps和loads 操作内存中的数据
dic = {'k1': 'v1'}
print(type(dic), dic) # <class 'dict'> {'k1': 'v1'}
str_d = json.dumps(dic) # 序列化
print(type(str_d), str_d) # <class 'str'> {"k1": "v1"}
dic_l = json.loads(str_d) # 反序列化
print(type(dic_l), dic_l) # <class 'dict'> {'k1': 'v1'}
2,dump和load
# dump和load 操作文件中的数据 序列化中文的话,要修改默认参数ensure_ascii=False
dic = {'k1': 'v1'}
f = open('json_test', 'w', encoding='utf-8')
json.dump(dic, f) # 文件序列化入的内容为{"k1": "v1"}
f.close()
f = open('json_test', encoding='utf-8')
# load只能反序列化一次性序列化入文件中的内容,如果多次dump,load时会报错!
ret = json.load(f)
print(ret) # {'k1': 'v1'}
f.close()
json一些参数的用法
dic = {'name': '蔠缬草', 'age': 25, 'hobby': 'read'}
str_d = json.dumps(dic) # 序列化
str_d1 = json.dumps(dic, ensure_ascii=False) # 序列化中文要想能看懂内容,要修改参数ensure_ascii=False
print(str_d) # {"age": 25, "name": "\u8520\u7f2c\u8349", "hobby": "read"}
print(str_d1) # {"hobby": "read", "name": "蔠缬草", "age": 25}
# 特殊格式的序列化
dic = {'name': '蔠缬草', 'age': 25, 'hobby': 'read'}
str_d = json.dumps(dic, sort_keys=True, indent=4, separators=(',', ':'), ensure_ascii=False)
print(str_d)
# 打印内容:
"""
{
"age":25,
"hobby":"read",
"name":"蔠缬草"
}
"""
pickle模块
"""
pickle 序列化为bytes类型
优点:python中所有的数据类型-->字符串
缺点:序列化的内容只有python能识别,序列化和反序列化需要相同的环境。
"""
pickle方法和json的方法相同
import pickle
# pickle和json的用法一样,不同的是序列化之后的值是bytes类型
dic = {'k1': 'v1', 'k2': 'v2'}
pd_str = pickle.dumps(dic)
print(pickle) # 序列化 打印bytes类型
pl_str = pickle.loads(pd_str)
print(pl_str) # 反序列化
dic = {'k1': 'v1', 'k2': 'v2'}
f = open('pickle_test', 'wb')
pickle.dump(dic, f) # 序列化 写入的是bytes类型
f.close()
f = open('pickle_test', 'rb')
ret = pickle.load(f) # 反序列化
print(ret)
shelve模块
"""
shelve
存在序列化句柄
使用句柄直接操作,非常方便
"""
shelve只有open方法,打开文件返回一个序列化句柄,通过操作句柄来完成序列化的相关操作。
import shelve
f = shelve.open('shelve_test') # 产生序列化句柄
f['key'] = {'k1': 'v1', 'k2': 'v2'} # 操作句柄进行文件序列化写入
f.close()
f = shelve.open('shelve_test')
print(f['key']) # 反序列化取值,key必须存在,否则报错
f.close()
shelve writeback参数的用法
f = shelve.open('shelve_test', writeback=False) # 参数writeback=False 数据修改不会生效
f['key']['k3'] = 'v3' # 修改并没有生效
f.close()
f = shelve.open('shelve_test')
print(f['key']) # {'k2': 'v2', 'k1': 'v1'}
f.close()
f = shelve.open('shelve_test', writeback=True)
f['key']['k3'] = 'v3' # 修改生效
f.close()
f = shelve.open('shelve_test')
print(f['key']) # {'k3': 'v3', 'k2': 'v2', 'k1': 'v1'}
f.close()
python模块之序列化模块的更多相关文章
- python之路----模块与序列化模块
认识模块 什么是模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用pyt ...
- python(时间模块,序列化模块等)
一.time模块 表示时间的三种方式: 时间戳:数字(计算机能认识的) 时间字符串:t='2012-12-12' 结构化时间:time.struct_time(tm_year=2017, tm_mon ...
- python基础编程:生成器、迭代器、time模块、序列化模块、反序列化模块、日志模块
目录: 生成器 迭代器 模块 time 序列化 反序列化 日志 一.生成器 列表生成式: a = [1,2,3,3,4,5,6,7,8,9,10] a = [i+1 for i in a ] prin ...
- Python 基础之序列化模块pickle与json
一:pickle 序列化模块把不能够直接存储的数据,变得可存储就是序列化把存储好的数据,转化成原本的数据类型,加做反序列化 php: 序列化和反序列化(1)serialize(2)unserializ ...
- Python内置模块之序列化模块
序列化模块 json dumps loads dump load pickle dumps loads dump load shelve json 1: dumps/loads import json ...
- python学习Day27--time模块、sys模块、os模块和序列化模块
[知识点] 1.时间模块: (1)时间戳时间,格林威治时间,float数据类型 英国伦敦的时间:1970.1.1 0:0:0 北京时间:1970.1.1 8:0:0 (2)结构化时间, ...
- sys模块和序列化模块
import sysprint(sys.version) #查看当前pycharm版本print(sys.path )#返回模块的搜索路径print(sys.platform )#返回操作系统的版本p ...
- os模块,序列化模块,json模块,pickle模块
一.os模块os.system("bash command") 运行shell命令,直接显示 os.popen("bash command).read() 运行shell ...
- 常用模块一(os模块、序列化模块(json和pickle))
一.os模块 os模块是与操作系统交互的一个接口. import os # 和文件和文件夹的操作有关 os.makedirs('dirname1/dirname2') # 可生成多层递归目录 os.r ...
- collections模块、时间模块、random模块、os模块、sys模块、序列化模块、subprocess模块
一.collections模块 1.其他数据类型 在内置数据类型(str.dict.list.tuple.set)的基础上,collections模块还提供了了几个额外的数据类型:Counter.de ...
随机推荐
- 【Vue】详解组件的基础与高级用法
Vue.js 最核心的功能就是组件(Component),从组件的构建.注册到组件间通信,Vue 2.x 提供了更多方式,让我们更灵活地使用组件来实现不同需求. 一.构建组件 1.1 组件基础 一个组 ...
- 计算机网络.{wireshark的使用实验}
---恢复内容开始--- 三种选择 1 2 3 端口镜像:交换机的某个端口,接受或者发送的数据给另外一个端口 ARP欺骗: ARP欺骗是利用ARP协议自身的不足进行的欺骗 1 执行ping命令, 2 ...
- openssl生成证书 - CSDN博客
大家都可以生成公钥.私钥对,无法确认公钥对到底是谁的. 如果能够确定公钥到底是谁的,就不会有这个问题了.例如,如果收到“黑客”冒充“服务器”发过来的公钥,经过某种检查,如果能够发现这个公钥不是“服务器 ...
- 【JZOJ4922】【NOIP2017提高组模拟12.17】环
题目描述 小A有一个环,环上有n个正整数.他有特殊的能力,能将环切成k段,每段包含一个或者多个数字.对于一个切分方案,小A将以如下方式计算优美程度: 首先对于每一段,求出他们的数字和.然后对于每段的和 ...
- idea 项目热部署设置
1.引入pom.xml() <!-- 热部署(必须) --> <dependency> <groupId>org.springframework.boot</ ...
- 洛谷 P3258 [JLOI2014]松鼠的新家 树链剖分+差分前缀和优化
目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例: 输出样例: 说明 说明 思路 AC代码 优化 优化后AC代码 总结 题面 题目链接 P3258 [JLOI2 ...
- 跟我一起安装jenkins
查看java版本 查看brew版本 升级 java brew cask install java 安装 jenkins brew install jenkins 执行 java -jar /usr/l ...
- 【C++】位运算实现加减乘除
#include<iostream> #include<assert.h> using namespace std; // 位运算实现加减乘除 int myAdd(int nu ...
- oralce ROLLUP
select id,area,stu_type,sum(score) score from students group by rollup(id,area,stu_type) order by id ...
- qt 中创建一个工作线程(例子)
当一个事件需要很长的处理时间,就创建一个工作线程,防止主界面卡死. 1.新建一个QT的gui项目,里面包含main.cpp,mainwindow.h,mainwindow.cpp,mainwindow ...