序列化模块

一、定义

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

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

二、相关模块

#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)
# 其他参数(数据,是否按键顺序排列,缩进,分隔符,是否默认ascii编码)
json_dic=json.dump(data,sort_keys=True,indent=2,seperators=(',',':'),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)

 

posted @ 2019-08-10 17:32  玉石非玉  阅读(144)  评论(0编辑  收藏  举报