什么叫序列化——将原本的字典、列表等内容转换成一个字符串的过程就叫做序列化

序列化的目的

1、以某种存储形式使自定义对象持久化;
2、将对象从一个地方传递到另一个地方。
3、使程序更具维护性。

json 是一种通用的序列化格式,只有很少的数据类型可以通过json转化为字符串

import json
dic = {'k1':'q1','k2':'q2','k3':'q3'}
str_dic = json.dumps(dic)  # 序列化,将一个字典转换成一个字符串
print(type(str_dic),str_dic)  # 注意,json转换完的字符串类型的字典中的字符串是由""表示的
dic1 = json.loads(str_dic)  # 反序列化,将字符串转回字典
print(type(dic1),dic1)  # 注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示
list1 = [1,2,3,4,{'k1':'q1','k2':'q2','k3':'q3'}]
str_list1 = json.dumps(list1)  # 注意,可以处理嵌套的数据类型
print(type(str_list1),str_list1)
list1_1 = json.loads(str_list1)
print(type(list1_1),list1_1)

import json
dic = {'k1':'q1','k2':'q2','k3':'q3'}
with open('qqq','w',encoding='utf-8') as f:  # dump方法接受一个文件句柄(f),将内容转换成json字符串写进文件
    json.dump(dic,f)
with open('qqq','r',encoding='utf-8') as f:  # load方法接受一个文件句柄(f),将文件中json字符串的内容转换成数据结构返回dic_1 = json.load(f)print(dic_1)

Skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),      设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key
ensure_ascii:,当它为True的时候,所有非ASCII码字符显示为\uXXXX序列,只需在dump时将ensure_ascii设置为False即可,      此时存入json的中文即可正常显示。)
indent:应该是一个非负的整型,如果是0就是顶格分行显示,如果为空就是一行最紧凑显示,若为其它数值,则是每行缩进的字符数
separators:分隔符,实际上是(item_separator, dict_separator)的一个元组,默认的就是(‘,’,’:’);      这表示dictionary内keys之间用“,”隔开,而KEY和value之间用“:”隔开。
sort_keys:将数据根据keys的值进行排序

import json
data = {'username':['哈哈','收到'],'sex':'male','age':26}
json_dic2 = json.dumps(data,sort_keys=True,indent=2,separators=(',',':'),ensure_ascii=False)
print(json_dic2)

pickle  python中所有的数据类型都可转化成字符串,但反序列化内容只能使用python读取

  且反序列化依赖代码

import pickle
dic = {'q1':'w1','q2':'w2','q3':'w3'}
str_dic = pickle.dumps(dic)
print(str_dic)  #一串二进制内容

dic2 = pickle.loads(str_dic)
print(dic2)    #字典import time
struct_time  = time.localtime(1000000000)
print(struct_time)
f = open('pickle_file','wb')
pickle.dump(struct_time,f)
f.close()f = open('pickle_file','rb')
struct_time2 = pickle.load(f)
f.close()
print(struct_time2.tm_year)

shelve 只有一个方法,open(),拿到一个文件句柄,操作与字典类似

import shelve
f = shelve.open('aaa')
f['s']={1:'a',2:'b'}
f.close()
f1 = shelve.open('aaa')
s = f1['s']  # 直接调用key,若不存在会报
f1.close()
print(s,s2)

转载于:https://www.cnblogs.com/xfdhh/p/10870906.html

Python之初识模块之序列化模块相关推荐

  1. Python常用模块之序列化模块

    用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,eval就不管用了,所以eval ...

  2. python sys模块讲解_python模块之sys模块和序列化模块(实例讲解)

    sys模块 sys模块是与python解释器交互的一个接口 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0),错误退出sys. ...

  3. Python学习日记(十八) 序列化模块

    什么是序列? 就是每一个元素被有序的排成一列 什么是序列化? 就是将原本的列表.字典等内容转化成字符串的过程 什么时候会用到序列化? 数据存储(把数据放在文件.数据库),网络传输等 序列化的目的 1. ...

  4. python模块之序列化模块

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

  5. python中常用的序列化模块_Python 中的序列化模块

    封面图片来源:沙沙野 序列化模块前面讲到解码编码的时候提过,网络数据传输只能通过 bytes 类型.而文件写入内容(不是指存储)既可以是 bytes,也可以是 string.这些操作都可以使用 eva ...

  6. [python](windows)分布式进程问题:pickle模块不能序列化lambda函数

    运行错误:_pickle.PicklingError: Can't pickle <function <lambda> at 0x000002BAAEF12F28>: attr ...

  7. python序列化模块json和pickle

    序列化相关 1. json 应用场景: json模块主要用于处理json格式的数据,可以将json格式的数据转化为python的字典,便于python处理,同时也可以将python的字典或列表等对象转 ...

  8. python中常用的序列化模块_第六章 常用模块(5):python常用模块(序列化模块:pickle,json,shelve,xml)...

    6.3.7 序列化模块 (pickle,json,shelve,xml) 文件写入,数据传输时,我们都是以字符串形式写入的(因为字符串可以encode成bytes). 那其他类型(比如字典,列表等)想 ...

  9. python中常用的序列化模块_Python中的序列化和反序列化

    为什么要序列化 内存中的字典.列表.集合以及各种对象,如何保存到一个文件中. 设计一套协议,按照某种规则,把内存中的数据保存到文件中,文件是一个个字节序列.所以必须把数据额转换为字节序列,输出到文件, ...

最新文章

  1. Linux.NET学习手记(2)
  2. 浏览器上实现数据的本地存储・小结
  3. BFS 算法解题套路框架+几个用于BFS的set与queue用法和技巧
  4. html自动执行的事件,js自执行事件
  5. JVM总结---各处总结
  6. 武汉将投放5亿元消费券,4月19日微信率先开抢
  7. c语言字符串如何调换位置,c语言字符串从第m个位置开始复制
  8. 08 域控 架构主机 转移_win2000域控迁移至win2008
  9. pic单片机tmr1计数c语言,PIC单片机C语言编程实例五.doc
  10. JVisualVM初步使用
  11. ROS时钟--支持时间倒计时小工具
  12. SVN出现红绿双向箭头原因及处理办法
  13. MySQL数据库入门(三)--- 查询、权限、join语法、外键、备份
  14. 机器人硬件需求描述标准化
  15. logback-spring.xml配置详解
  16. Apple 公司账号续费流程
  17. 用Arduino实现跨年倒计时
  18. 系统架构设计师-软件开发模型(瀑布模型)
  19. 动漫行业长尾词,动漫行业推广怎么选择长尾词
  20. 为啥rust禁播_rust游戏,rust游戏为什么被禁播

热门文章

  1. 利用归并排序求逆序对
  2. 理解操作系统IO多路复用
  3. Android动态申请多个权限-非第三方框架
  4. 第十三周项目四-立体类族共有的抽象类
  5. Android Activity 和 ViewGroup中事件触发和传递机制
  6. Java8新特性学习记录
  7. flask 快速入门链接
  8. Java NIO 学习笔记(三)----Selector
  9. git pull 显示的冲突---解决办法git stash
  10. PHP异常处理类(文件上传提示)