序列化

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

  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 数组遍历方法forEach和map的原理解析和实际应用

    一.前言 forEach和map是数组的两个方法,作用都是遍历数组.在vue项目的处理数据中经常会用到,这里介绍一下两者的区别和具体用法示例. 二.代码 1. 相同点 都是数组的方法 都用来遍历数组 ...

  2. python 布尔值索引

  3. Duplicate a whole line in Vim

    yy or Y to copy the line or dd to delete (cutting) the line then p to paste the copied or deleted te ...

  4. NFS实现(双httpd + php-fpm + nfs + mysql 搭建discuz论坛)的方法

    NFS相关介绍 一.NFS简介 1. NFS(Network File System):NFS是一个文件共享协议, 也是是在类Unix系统中在内核中实现的文件系统. 2. 起源:最早是由SUN公司研发 ...

  5. Contentprovider 注册 启动简单流程

    安装app时packagemanager 读取manixfest获取provider信息 存在数据库里流程:1.加载ActivityThread main方法,创建消息队列.ActivityThrea ...

  6. 【JZOJ4790】【NOIP2016提高A组模拟9.21】选数问题

    题目描述 在麦克雷的面前有N个数,以及一个R*C的矩阵.现在他的任务是从N个数中取出R*C个,并填入这个矩阵中.矩阵每一行的法值为本行最大值与最小值的差,而整个矩阵的法值为每一行的法值的最大值.现在, ...

  7. httpclient向浏览器发送get和post请求

    get请求代码实现 public static void main(String[] args) { CloseableHttpClient httpClient = null;  //请求对象 Cl ...

  8. HTML5八大特性助力移动WebApp开发

    http://www.cocoachina.com/webapp/20150906/13344.html WebApp的实现基础就是HMTL5+JS+CSS3,但是WebApp还是基于浏览器的微网站开 ...

  9. JAVA代码规范 标签: java文档工作 2016-06-12 21:50 277人阅读 评论(5) 收藏

    开始做java的ITOO了,近期的工作内容就是按照代码规范来改自己负责的代码,之前做机房收费系统的时候,也是经常验收的,甚至于我们上次验收的时候,老师也去了.对于我们的代码规范,老师其实是很重视的,他 ...

  10. Person Re-identification 系列论文笔记(二):A Discriminatively Learned CNN Embedding for Person Re-identification

    A Discriminatively Learned CNN Embedding for Person Re-identification Zheng Z, Zheng L, Yang Y. A Di ...