序列化模块

Posted lowislucifer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了序列化模块相关的知识,希望对你有一定的参考价值。

一、定义

#序列化 —— 转向一个字符串数据类型
#序列 —— 字符串

#从数据类型 —— 字符串的过程  序列化
#从字符串 —— 数据类型  反序列化

二、相关模块

#json 通用的序列化格式,并且其他语言都用
    # 但只有很少一部分数据类型可以通过json转化成字符串
#pickle 所有的python中的数据类型都可以转化成字符串形式
    #序列化的内容只有python能理解
    #且部分反序列化依赖代码
#shelve 有序列化句柄,使用句柄直接操作,很方便。

三、json

#json    dumps序列化   loads反序列化   内存中操作
import json
dic=k:v
print(type(dic))
str_d=json.dumps(dic)   #序列化
print(type(str_d),str_d)
# <class ‘dict‘>
# <class ‘str‘> "k": "v"
#本身单引号,但是内部用到所有的字符串元素要用双引号才能识别
dic_d=json.loads(str_d)
print(type(dic_d),dic_d)
# <class ‘dict‘> ‘k‘: ‘v‘

#数字,字符串,列表,字典,元组(转成列表再序列化)
#集合不可以转化集合

#json   dump   load  文件中操作  前一个参数是内容,第二个参数是文件
dic2=k2:v2       #先序列化再转进去
f=open(fff,w,encoding=utf-8)
json.dump(dic2,f)
f.close()
# f=open(‘fff‘)        #还没有读文字,不用写encoding
# res=json.load(f)
# f.close()            #可以关闭之后再打印,因为已经读出来了
# print(type(res),res)

# 上述如果内容有中文,可以使用json.dump(dic,f,ensure_ascii=False)
# 则写入文件的内容为中文,否则默认为bytes类型写入

# 不可以一次多步输入。
# 必须分次往里面写
# 可以json中写入时加\n,读时for一行一行读,然后每一行进行Loads

四、pickle

#pickle  提供上述loads,dumps,load,dump方法
# 并且可以多步读入
#可以序列化集合,但是dumps之后是bites类型,loads之后是正常内容
#dump之前,打开文件用wb,load之前,打开文件用rb

五、shelve

# shelve打开文件,只提供open方法
# 文件句柄,可以直接把数据类型直接写到文件中去
# 但每次打开就会创建三个文件,但是看不懂(bak,dat,dir)
# 不支持多个应用同一时间往DB中写
# 一个问题:参数写flag=‘r‘,只读,但是仍然可以修改
# writebalck=True,参数用处,可以感知修改,减少出错概率,但是会增加额外的内存消耗和等待时间
import shelve
f=shelve.open(shelve_file_test)
f[key]=int:5,string:hello
f.close()

f1=shelve.open(shelve_file_test,flag=r)
existing1=f1[key]
f1[key][int]=20
f.close()
print(existing1)

 

以上是关于序列化模块的主要内容,如果未能解决你的问题,请参考以下文章

模块二之序列化模块以及collections模块

Python 解析模块 异常模块 响应模块 序列化和反序列化组件

内置模块——序列化模块:jsonpickleshelve

Python 入门之 内置模块 -- 序列化模块(json模块pickle模块)

python模块之序列化模块

day_24(序列化模块)