码迷,mamicode.com
首页 > 其他好文 > 详细

序列化模块

时间:2018-09-02 12:29:53      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:键值   str   val   其他   shel   print   数据   dict   打开   

1.序列化:把内存里的数据转化成字符串,以存到硬盘上

把字符转换成内存数据,为反序列化

用于序列化的模块有:json,pickle,shelve

 

一:json

# dumps把内存数据类型序列化 
data = {age:18,"name":dempsey}
a = json.dumps(data)
print(a,type(a))
#{"age": 18, "name": "dempsey"} <class ‘str‘>

# 存到文件里
f = open(text.json,w,encoding=utf-8)
json.dump(data,f) # 注意:第二个参数为文件对象,并不是文件名,所以要先打开个文件


# 反序列化
data = {age:18,"name":dempsey}
a = json.dumps(data)
a2 = json.loads(a)
print(a2,type(a2))
# {‘age‘: 18, ‘name‘: ‘dempsey‘} <class ‘dict‘>

# 把文件里的字符反序列化读取到内存里
f = open("text.json",r)
data2 = json.load(f)
print(data2,type(data2))
#{‘age‘: 18, ‘name‘: ‘dempsey‘} <class ‘dict‘>

只是把数据类型转换成字符串存到内存里的意义?

1.把 内存数据通过网络传输共享给远程其他人

2.定义了不同语言之间的交互规则:

纯文本:不能共享复杂的数据类型

xml:可读性差,占空间大

json:可读性好,占空间小

二.pickle模块

# 把数据类型存到文件里
data1 = [1,2,3,4,5]
data2 = {"name":"zdp","age":18}
#pickle的dump实际上是把数据类型转成bytes类型,要用wb模式
f = open("text.pkl",wb) 
pickle.dump(data1,f)

# 把数据类型从文件里读到内存里
f = open(text.pkl,rb)
a = pickle.load(f)
print(a)

总结:

json: 只能处理str, tuple, list, dict, int 类型

pickle: 支持python里所有的数据类型(包括函数), 但只能在python里使用

三.shelve模块,对pickle进行封装,只能在python中使用

json只能把一个数据类型放到一个文件里,只能一次dump,load一次

而shelve可以利用key-value模式存多个数据类型

a = [1,2,3,4]
b = {"name":zdp,"age":18}

f  = shelve.open(shelve_text) #打开一个文件
# 持久化列表
f[numbers] = a
f[dict] = b

# 可以对f进行相当于字典的操作
print(list(f.keys()))
print(f.get(numbers))
f.close()

# [‘numbers‘, ‘dict‘]
# [1, 2, 3, 4]

可以对数据类型进行重新赋值,删除操作,添加新的键值对操作。

序列化模块

标签:键值   str   val   其他   shel   print   数据   dict   打开   

原文地址:https://www.cnblogs.com/dempsey888/p/9573279.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!