05.json与pickle
# 01.json
1.序列化 (json.dumps) :是将内存中的对象存储到硬盘,变成字符串
2.反序列化(json.loads) : 将刚刚保存在硬盘中的内存对象从新加载到内存中
json.dumps( data,ensure_ascii=False, indent=4)
#json序列化代码
import json
info = {
'name':"tom",
"age" :"100"
}
f = open("test.txt",'w')
# print(json.dumps(info))
f.write(json.dumps(info))
f.close()
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
#json反序列化代码
import json
f = open("test.txt","r")
data = json.loads(f.read())
f.close()
print(data["age"])
1
2
3
4
5
6
2
3
4
5
6
# 02.pickle序列化
python的pickle模块实现了python的所有数据序列和反序列化。
基本上功能使用和JSON模块没有太大区别,方法也同样是dumps/dump和loads/load
与JSON不同的是pickle不是用于多种语言间的数据传输,它仅作为python对象的持久化或者python程序间进行互相传输对象的方法,因此它支持了python所有的数据类型。
pickle序列化代码
#pickle序列化代码
import pickle
info = {
'name':"tom",
"age" :"100"
}
f = open("test.txt",'wb')
f.write(pickle.dumps(info))
f.close()
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
pickle反序列化代码
#pickle反序列化代码
import pickle
f = open("test.txt","rb")
data = pickle.loads(f.read())
f.close()
print(data["age"])
1
2
3
4
5
6
2
3
4
5
6
# 03.解决序列化datetime类型
import json,datetime
class JsonCustomEncoder(json.JSONEncoder):
def default(self, field):
if isinstance(field, datetime.datetime):
return field.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(field, datetime.date):
return field.strftime('%Y-%m-%d')
else:
return json.JSONEncoder.default(self, field)
t = datetime.datetime.now()
print(type(t),t)
f = open('ttt','w') #指定将内容写入到ttt文件中
f.write(json.dumps(t,cls=JsonCustomEncoder)) #使用时候只要在json.dumps增加个cls参数即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
JSON和pickle模块的区别
- 1.JSON只能处理基本数据类型。pickle能处理所有Python的数据类型。
- 2.JSON用于各种语言之间的字符转换。
- pickle用于Python程序对象的持久化或者Python程序间对象网络传输,但不同版本的Python序列化可能还有差异
上次更新: 2024/3/13 15:35:10