python 序列化模块

序列化模块

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

序列——字符串

用在数据存储以及在网络上传输的时候等

从数据类>>>字符串的过程 叫序列化

从字符串>>>数据类型的过程 叫反序列化

序列化格式

json 通用的序列化格式

json是一个在所有语言都通用的序列化格式,但是相对的它支持的数据类型就比较少了

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

在python中,数字int,字符串str,列表list,字典dict都是能序列化的

元组tuple也能序列化,不过它是转成列表再序列化的,反序列化后还是列表

集合set是不能进行序列化的

json的序列化方法dumps和反序列化方法loads

dumps

import json
li = [1,2,3,'holle',[22,33],{'k1':'v1'},(23,3)]
ret = json.dumps(li)
print(type(ret),ret)

<class 'str'> [1, 2, 3, "holle", [22, 33], {"k1": "v1"}, [23, 3]]

loads

import json
li = [1,2,3,'holle',[22,33],{'k1':'v1'},(23,3)]
ret = json.dumps(li)
print(type(ret),ret)
ret2 = json.loads(ret)
print(type(ret2),ret2)

<class 'str'> [1, 2, 3, "holle", [22, 33], {"k1": "v1"}, [23, 3]]
<class 'list'> [1, 2, 3, 'holle', [22, 33], {'k1': 'v1'}, [23, 3]]

除了这俩还有另外两个dumpload,这俩看着和上面俩只是差个s

它们的功能也是相似的,当然也有着不听之处

dump

import json
li = {1:"a",2:'b'}
f = open('file','w',encoding='utf-8')
json.dump(li,f)
f.close()

它的作用是在一个文件中写入序列化之后的字符串

load

import json
li = {1:"a",2:'b'}
f = open('file','w',encoding='utf-8')
json.dump(li,f)
f.close()
f = open('file')
res = json.load(f)
f.close()
print(type(res),res)

<class 'dict'> {'1': 'a', '2': 'b'}

对文件的读取,读取必须是用dump写入的

pickle

 所有python中的数据类型都可以转化成字符串形式

pickle序列化的内容只有python能理解

pickle反序列化必须要与序列化时相同的环境支持

pickle的用法和json的一样

不过dumps写的是bytes类型的,所以读写要加上bytes类型的转换

shelve

序列化句柄

使用句柄直接操作,非常方便

import shelve
f = shelve.open('shelve_file')
f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'}
f.close()
f1 = shelve.open('shelve_file')
existing = f1['key'] 
f1.close()
print(existing)

{'float': 9.5, 'int': 10, 'string': 'Sample data'}

直接对文件句柄操作,就可以存入数据

取出数据的时候也只需要直接用key获取即可,但是如果key不存在会报错

posted @ 2018-01-11 17:01  GrandDarkness  阅读(149)  评论(0编辑  收藏  举报