序列化——从其他数据类型转向一个字符串数据类型

反序列化——字符串到其他数据类型

序列——字符串

json  #五星

pickle  #四星

shelve  #py3新增

 

json  #通用的序列化格式

      #只有很少的一部分数据类型能通过json转化成字符串

pickle  #序列化和反序列化需要相同的环境

      #所有python数据类型都能转化

shelve  #序列化句柄,使用句柄直接操作,很方便

       #

 

#######################################################

 

json  dumps序列化方法 loads反序列化方法(内部使用元素必须双引号)

str_d = json.dumps(dic)

dic_d = json.loads(str_d)

可序列化内容:数字 字符串 列表 字典 元组(会被转化成序列)

 

json.dump(dic,f)

json.load(f)  #对文件操作

json.dump(dic,f,ensure_ascii=False) 加上参数防止中文变bytes类型

参数sort_keys = True, indent = , separators = (',', ':' ) 

 

#######################################################

 

pickle命令同上,序列化以后是bytes格式,可以序列化任意数据类型

dump需要用wb格式打开文件,load需要用rb格式打开

可以按顺序dump和load,json不行(用dumps和loads加文件读写)

 

#######################################################

 

shelve可以直接对文件句柄进行操作

f = shelve.open('file')

f['key'] = {'int':10,'float':9.5}

f.close

 

f1 = shelve.open('file')

a = f1['key']  #key不存在会报错

 

shelve.open('file',flag = 'r')  #据说是只读模式,不让写入(然而不能修改,可以写入)

shelve.open('file',writeback=True)  #会记录待持久化对象的修改,但会增加内存消耗