序列化

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

  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. Ubuntu查找通过apt命令已安装软件

    方法一 apt list --installed 方法二 dpkg -l

  2. tomcat配置证书

    [size=x-small][size=xx-large][size=medium] 1.利用java 生成一个.keystore文件 进入命令行(假设已经设定了环境变量) 执行 keytool -g ...

  3. Codeforces 436C

    题目链接 C. Dungeons and Candies time limit per test 2 seconds memory limit per test 256 megabytes input ...

  4. Servlet容器container

    通俗点说,所谓容器,就是放东西的地方.Servlet容器自然就是放Servlet的地方.J2EE开发,是有分工的.一般的程序员,写得都是应用开发,我们会按照一定的规则,开发我们的系统,比如用Servl ...

  5. SQLAlchemy中filter和filer_by的区别

    filter: session.query(MyClass).filter(MyClass.name == 'some name') filter_by: session.query(MyClass) ...

  6. 【时光回溯】【JZOJ3571】【GDKOI2014】内存分配

    题目描述 输入 输出 输出m行,每行一个整数,代表输入中每次程序变化后系统所需要的空闲内存单位数. 样例输入 2 3 1 4 1 4 2 2 1 2 1 1 1 1 1 样例输出 2 3 1 数据范围 ...

  7. 《DL/T 976-2017 带电作业用工具、装置和设备预防性试验规程》中的样品名称及试验项目

  8. jenkins集成错误 标签: 发布 2016-01-10 20:45 747人阅读 评论(21) 收藏

    进入ITOO的项目以后,终于要将自己负责的模块在jenkins上面集成发布了.首先自己按照文档要求一步一步的将配置完成,然后构建,不错所料出错了,经过修改,终于构建成功!构建成功以后就没再管了,结果第 ...

  9. QT 中如何实现一个简单的动画

    QT可以实现一下简单的动画,比如 运动的时钟 闪烁的按钮. 动画的实现: (1)创建一个定时器 (2)调用QWidget::update()通知界面重绘 实现一个按钮闪烁的例子: circlewidg ...

  10. Python基础:19类和实例的内建函数

    1:issubclass() issubclass()布尔函数,判断一个类是否是另一个类的子类或子孙类.它有如下语法:issubclass(sub,sup) 这个函数也允许“不严格”的子类,意味着,一 ...