模块:序列化

Posted aizhinong

tags:

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

序列化:
数据类型转换成一个字符串数据类型
反序列化:
字符串数据类型转换为数据类型
三个模块可以实现:json pickle shelve
json是所有语言通用的,但仅能转换列表、字典、数字、字符串和元祖:
dumps:数据类型转换成字符串数据类型
loads:字符串数据类型转换成数据类型
import json
lis = [aike,demo,cool,onedd]
lis1 = json.dumps(lis)
print(lis1,type(lis1))#字符串类型
lis2 = json.loads(lis1)
print(lis2,type(lis2))#列表

#打印:
["aike", "demo", "cool", "onedd"] <class str>
[aike, demo, cool, onedd] <class list>

dump:数据类型转换成字符串数据类型后转入文件
lis = [aike1,demo,cool,onedd]
with open(fifl,w,encoding=utf-8) as f:
    json.dump(lis,f)#无返回值,已经写入到文件

 

load:将文件中的数据类型转换成字符串数据类型,不改变原文件内容
f1 = open(fifl,r,encoding=utf-8)
ret = json.load(f1)
print(type(ret),ret)#列表
f1.close()

#打印:
<class list> [aike1, demo, cool, onedd]

 

json当中,dump和load只能一行一行写入或读取,所以可以利用dumps、loads和文件循环的方式写入或读取.
lis = [aike:1,demo:2,cool:3,onedd:4]
for i in lis:
    dic = json.dumps(i)#逐个序列化
    with open(fi,a,encoding=utf-8) as f:
        f.write(dic+\n)#将序列化的字典主动写入文件,一个字典一行
lis = []
with open(fi,r,encoding=utf-8) as f:
    for line in f:
       lis.append(json.loads(line.strip()))#逐个将反序列化的字典加入到列表中
print(lis)

#打印:
[aike: 1, demo: 2, cool: 3, onedd: 4]

pickle
是python用的,支持python当中的所有数据类型,用法与json一样
import pickle
lis = [aike,demo,cool,onedd]
ret = pickle.dumps(lis) #返回的是bytes数据类型的内容
print(ret,type(ret))
ret1 = pickle.loads(ret)
print(ret1)

#打印:
b\x80\x03]q\x00(X\x04\x00\x00\x00aikeq\x01X\x04\x00\x00\x00demoq\x02X\x04\x00\x00\x00coolq\x03X\x05\x00\x00\x00oneddq\x04e. <class bytes>
[aike, demo, cool, onedd]

 

但序列化后返回的bytes数据类型,所以文件操作需要使用wb,rb模式,切拥有记忆,能够写多条数据,能够取对应的多条数据
lis = [aike,demo,cool,onedd]
lis2 = [aike2,demo2,cool2,onedd2]
with open(fixx,wb) as f:
    ret3 = pickle.dump(lis,f) #能够写多条数据
    ret4 = pickle.dump(lis2,f)
with open(fixx,rb) as f:
    ret3 = pickle.load(f)
    ret4 = pickle.load(f) #能够取对应多条的数据
    print(ret3)
    print(ret4)

#打印:
[aike, demo, cool, onedd]
[aike2, demo2, cool2, onedd2]

shelve
是通过序列化句柄操作的
import shelve
f = shelve.open(she)
f[key] = aike:1,demo:2,cool:3,onedd:4 #直接通过文件句柄存入数据
f.close()

f = shelve.open(she)
ret = f[key] #直接通过‘key’就可以直接读取文件,若‘key’不存在会报错
print(ret)

 



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

模块二之序列化模块以及collections模块

Python 解析模块 异常模块 响应模块 序列化和反序列化组件

内置模块——序列化模块:jsonpickleshelve

Python 入门之 内置模块 -- 序列化模块(json模块pickle模块)

python模块之序列化模块

day_24(序列化模块)