序列化模块

Posted dempsey888

tags:

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

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]

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

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

CTS测试CtsWindowManagerDeviceTestCases模块的testShowWhenLockedImeActivityAndShowSoftInput测试fail项解决方法(代码片段

Part5-1-2 Nodejs 核心模块

如何将字符串数据从活动发送到片段?

Spark闭包与序列化

argparse 代码片段只打印部分日志

nodejs常用代码片段