python 序列化和反序列化
Posted Walt Hwang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 序列化和反序列化相关的知识,希望对你有一定的参考价值。
- 概念
序列化: 将对象的状态信息转换为可以存储或传输的形式的过程。就是把对象转换成字符串的过程 反序列化: 把字符串转换成python可以识别的数据类型对象的过程
- 应用
#数据存储 #网络传输
- 模块
- json
#通用的序列化格式 #只有少部分数据类型能通过json转换(数字,字符串,列表,字典,元组) #写文件的操作时,如果找不到ascii码的格式,就会自动转成bytes,所以要添加ensure_ascii=False的参数 #能多次写,但不能多次读 import json dic = {‘k1‘,‘v1‘} #在内存中操作 #序列化 str_d = json.dumps(dic) #反序列化 dic_d = json.loads(str_d) #直接对文件操作 #序列化 f = open(‘file‘,‘w‘) json.dump(dic,f) #反序列化 f = open(‘file‘) ret = json.load(f) #如果要读写多行,用对文件的每次读一行,和写的时候添加 进行处理 #写 l = [dic1,dic2,dic3] f = open(‘file‘,‘w‘) for dic in l: str_d = json.dumps(dic) f.write(str_d+‘ ‘) f.close() #写 f = open(‘file‘) l = [] for line in f: dic = json.loads(line.strip()) l.append(dic) f.close()
- pickle
#支持对所有python类型的处理 #使用pickle的读写文件的操作时,是以bytes形式的,所以open要用加b的模式 dic = {‘k1‘:‘v1‘, ‘k2‘,:‘v2‘} #在内存中操作 #序列化 str_d = pickle.dumps(dic) #反序列化 dic_d = pickle.loads(str_d) #对文件的操作 #序列化 f = open(‘file‘,‘wb‘) pickle.dump(dic,f) #反序列化 f = open(‘file‘,‘rb‘) dic_d = pickle.load(f) #pickle直接支持多次读写
- shelve
#一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式 import shelve #序列化 f = shelve.open(‘file‘) f[‘key‘] = {‘k1‘:‘v1‘, ‘k2‘:‘v2‘} f.close() #反序列化 f = shelve.open(‘file‘) ret = f[‘key‘] #如果key不存在会报错 f.close()
#如果我们对序列化文件的内容进行修改,比如下面的操作,不会被保存,需要令writeback=True。但这方法会增加额外的内存消耗
f = shelve.open(‘file‘)
f[‘key‘][‘k1‘] = ‘hahaha‘ #没有被保存
#需要这么写f = shelve.open(‘file‘,writeback=True)
f[‘key‘][‘k1‘] = ‘hahaha‘
- json
以上是关于python 序列化和反序列化的主要内容,如果未能解决你的问题,请参考以下文章