模块:序列化

序列化:
数据类型转换成一个字符串数据类型
反序列化:
字符串数据类型转换为数据类型
三个模块可以实现: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+'
')#将序列化的字典主动写入文件,一个字典一行
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'x80x03]qx00(Xx04x00x00x00aikeqx01Xx04x00x00x00demoqx02Xx04x00x00x00coolqx03Xx05x00x00x00oneddqx04e.' <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)


原文地址:https://www.cnblogs.com/aizhinong/p/11430970.html