模块:序列化
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)
以上是关于模块:序列化的主要内容,如果未能解决你的问题,请参考以下文章
Python 解析模块 异常模块 响应模块 序列化和反序列化组件