python基础学习17----json&pickle&shelve
程序员文章站
2022-11-14 19:48:44
json和pickle的功能是对数据进行序列化 将对象转换为可通过网络传输或可以存储到本地磁盘的数据格式(如:XML、JSON或特定格式的字节串)的过程称为序列化;反之,则称为反序列化 json模块 对于Python内置的数据类型(如:str, unicode, int, float, bool, ......
json和pickle的功能是对数据进行序列化
将对象转换为可通过网络传输或可以存储到本地磁盘的数据格式(如:xml、json或特定格式的字节串)的过程称为序列化;反之,则称为反序列化
json模块
对于python内置的数据类型(如:str, unicode, int, float, bool, none, list, tuple, dict)json模块可以直接进行序列化/反序列化处理
dumps和loads
import json
list1=[1,2,3,"hello world"]
data1=json.dumps(list1)
print(data1)#[1, 2, 3, "hello world"]
dict1={"one":1,"two":2,"three":3}
data2=json.dumps(dict1)
print(dict1)#{'one': 1, 'two': 2, 'three': 3}
data1=json.loads(data1)
print(data1)#[1, 2, 3, 'hello world']
data2=json.loads(data2)
print(data2)#{'one': 1, 'two': 2, 'three': 3}
print(data2["one"])#1
dump和load
这两种方法可将序列化的数据存到文本和读取文本中序列化的数据
list1=[1,2,3,"hello world"]
with open("listfile","w") as f1:
json.dump(list1,f1)
with open("listfile","r") as f2:
data=json.load(f2)
print(data)
pickle模块
python的pickle模块实现了python的所有数据序列和反序列化。基本上功能使用和json模块没有太大区别,方法也同样是dumps/dump和loads/load。
与json不同的是pickle不是用于多种语言间的数据传输,它仅作为python对象的持久化或者python程序间进行互相传输对象的方法,因此它支持了python所有的数据类型。
import pickle
class people:
def __init__(self,name,age):
self.name=name
self.age=age
sfencs=people("sfencs",19)
data=pickle.dumps(sfencs)
print(data)
#b'\x80\x03c__main__\npeople\nq\x00)\x81q\x01}q\x02(x\x04\x00\x00\x00nameq\x03x\x06\x00\x00\x00sfencsq\x04x\x03\x00\x00\x00ageq\x05k\x13ub.'
data=pickle.loads(data)
print(data)#<__main__.people object at 0x0000029d8402dda0>
pickle和json同样支持dump,load,dumps,loads方法
shelve模块
shelve是一个简单的数据存储方案,类似key-value数据库,可以很方便的保存python对象,其内部是通过pickle协议来实现数据序列化。
其中key必须是字符串
import shelve
with shelve.open("shelvefile") as f:
f["one"]=1
f["two"]=2
#这里直接保存到了文件中,生成了3个文件shelvefile.bak,shelvefile.dat,shelvefile.dir
with shelve.open('shelvefile') as f:#只使用shelvefile名字即可
print(f["one"])#1
for key,value in f.items():
print(key, ': ', value)
#one : 1
#two : 2
参考: