序列化

"""
序列--字符串
序列化--其他数据类型转化为字符串数据类型
反序列化--字符串转化为其他数据类型
"""

  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模块之序列化模块的更多相关文章

  1. python之路----模块与序列化模块

    认识模块 什么是模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用pyt ...

  2. python(时间模块,序列化模块等)

    一.time模块 表示时间的三种方式: 时间戳:数字(计算机能认识的) 时间字符串:t='2012-12-12' 结构化时间:time.struct_time(tm_year=2017, tm_mon ...

  3. python基础编程:生成器、迭代器、time模块、序列化模块、反序列化模块、日志模块

    目录: 生成器 迭代器 模块 time 序列化 反序列化 日志 一.生成器 列表生成式: a = [1,2,3,3,4,5,6,7,8,9,10] a = [i+1 for i in a ] prin ...

  4. Python 基础之序列化模块pickle与json

    一:pickle 序列化模块把不能够直接存储的数据,变得可存储就是序列化把存储好的数据,转化成原本的数据类型,加做反序列化 php: 序列化和反序列化(1)serialize(2)unserializ ...

  5. Python内置模块之序列化模块

    序列化模块 json dumps loads dump load pickle dumps loads dump load shelve json 1: dumps/loads import json ...

  6. python学习Day27--time模块、sys模块、os模块和序列化模块

    [知识点] 1.时间模块: (1)时间戳时间,格林威治时间,float数据类型 英国伦敦的时间:1970.1.1     0:0:0 北京时间:1970.1.1     8:0:0 (2)结构化时间, ...

  7. sys模块和序列化模块

    import sysprint(sys.version) #查看当前pycharm版本print(sys.path )#返回模块的搜索路径print(sys.platform )#返回操作系统的版本p ...

  8. os模块,序列化模块,json模块,pickle模块

    一.os模块os.system("bash command") 运行shell命令,直接显示 os.popen("bash command).read() 运行shell ...

  9. 常用模块一(os模块、序列化模块(json和pickle))

    一.os模块 os模块是与操作系统交互的一个接口. import os # 和文件和文件夹的操作有关 os.makedirs('dirname1/dirname2') # 可生成多层递归目录 os.r ...

  10. collections模块、时间模块、random模块、os模块、sys模块、序列化模块、subprocess模块

    一.collections模块 1.其他数据类型 在内置数据类型(str.dict.list.tuple.set)的基础上,collections模块还提供了了几个额外的数据类型:Counter.de ...

随机推荐

  1. vue中 表头 th 合并单元格,且表格列数不定的动态渲染方法

    吐槽 今天,在vue中遇到 复杂表格的渲染 ,需要合并表头th的单元格,且合并单元格的那列的表头数据是动态数据,也就是不知道会有多少个表头列,而这几个表头列还分了好几个子表头. 这个需求在js里用Ju ...

  2. Webpack ERROR in Path must be a string. Received undefined

    在学习webpack过程中,我遇到的下面这个问题及解决方法. 问题如下: node版本如下截图: package.json文件截图: webpack.config.js文件截图: 然后,我运行项目,报 ...

  3. 【51NOD1304】字符串的相似度

    题目描述 我们定义2个字符串的相似度等于两个串的相同前缀的长度.例如 "abc" 同 "abd" 的相似度为2,"aaa" 同 " ...

  4. 10种简单的Java性能优化(转)

    本文由 ImportNew - 一直在路上 翻译自 jaxenter.欢迎加入翻译小组.转载请见文末要求. 你是否正打算优化hashCode()方法?是否想要绕开正则表达式?Lukas Eder介绍了 ...

  5. Minimum Depth of Binary Tree最短深度

    Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...

  6. 两张图说明http协议,tcp协议,ip协议,dns服务之间的关系和区别

    一.理解一个传输流再去扩展 用http举例来说,首先作为发送端的客户端在应用层(http协议)发出一个想看某个web页面的http请求. 接着,为了传输方便,在传输层(tcp协议)把从应用层处收到的数 ...

  7. Extended Traffic

    题目链接 题意:有n个路口,m条通路,如果经过一条路则会得到(终点 - 起点)^3的权值,求从1点到其他点的最小权值,如果权值小于3或无法到达输出'?'. 题解:因为权值可能为负,所以用SPFA来解题 ...

  8. HZOJ 巨神兵

    60pts: 每个DAG的拓扑序是唯一的,所以考虑将DAG分层.f[i][j]记录当前选择的节点状态是i,最后一层的节点状态为j(dep取最大). 初始状态:$f[i][i]=1;i\in [1,1& ...

  9. shell学习(15)- eval及shell No such file or directory解决办法

    eval可以读取一连串的参数,然后按照参数特性来执行.参数数目不限,彼此之间用分号隔开. eval会对后面的命令进行两遍扫描,如果第一遍扫描后,命令是个普通命令,则执行此命令:如果命令中含有变量的间接 ...

  10. LeetCode115 Distinct Subsequences

    Given a string S and a string T, count the number of distinct subsequences of T in S. (Hard) A subse ...