序列化

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

  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. python正则表达式应用 定义一个函数,求字符串中出现的所有整数之和

  2. oracle-ASM存储器

    自动存储管理 Oracle 10g引进的一种新型存储机制.它依靠oracle来维护企业的数据库存储器,被设计用来解除磁盘和存储器管理的负担,可以使用ASM来定义用于文件管理的磁盘组. 磁盘组类似于某些 ...

  3. 【转】Jython安装(Win)

    ython的安装比较简单,Jython的安装程序本身就是一个Java应用程序,因此,在安装之前,你必须具备Java运行的环境.下面以 Jython的Jython2.2.1为例,说明Jython的安装步 ...

  4. php的模板原理

    下载了开源论坛phpbb的代码,突然对php模板初步了解了一下: php与Html在一起编写真的是很烦人,所以必须要把数据计算以及显示格式分离,这就需要模板来实现了. http://baike.bai ...

  5. Nginx教程(二) Nginx虚拟主机配置 (转)

    Nginx教程(二) Nginx虚拟主机配置 1 虚拟主机管理 1.1 Nginx管理虚拟主机 虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主 ...

  6. poj2987 最大权闭合图

    基础题. 最小割后,与汇点相连的点都不要,然后从源点出发dfs一遍有多少相连的点即可. #include<stdio.h> #include<string.h> #includ ...

  7. Liferay OSGi注解(Annotation) - 使用手册(译文)

    mark过来好好用 上Neil的博客地址Liferay OSGi注解(Annotation) - 使用手册(译文) @Component是注入服务 @Reference是获取服务(在Liferay框架 ...

  8. ELK4之进阶学习

    1.精确查找和模糊查找(term和match的区别) match经过分析(analyer)的, term是不经过分词,直接去倒排索引中查找精确的值. 2.建议器的简介(最左前缀或者自带的做) (1)直 ...

  9. AtCoder Regular Contest 082 D Derangement

    AtCoder Regular Contest 082 D Derangement 与下标相同与下个交换就好了.... Define a sequence of ’o’ and ’x’ of lengt ...

  10. nodeJs学习-03 GET数据请求,js拆解/querystring/url

    原生JS解析参数: const http = require('http'); http.createServer(function(req,res){ var GET = {}; //接收数据容器 ...