序列化 json pickle shelve模块

序列化:把一个对象,从内存中变成一个可存储,可传输的过程。
json 不能序列化函数和类。json模块可以与其它程序进行接口对接。
pickle 是python专有的一个序列化模块,可以序列化函数,但不能与其它语言进行接口。
shelve模块更灵活,只有一个open方法。

import json

dic = {"name": "gf", "age": "20"}
aa = json.dumps(dic)  # 序列化aa这个字典
f = open("test", "w")
f.write(aa)
f.close()
import json
f=open("test","r")
data=f.read()  
data=json.loads(data) #反序列化
print(data["name"])  #打印 test 文件里边 name 这个键值对的内容。
f.close()

在这里插入图片描述
pickle:( 不经常用,知道就行了 )

import pickle
def foo():
    print("ok")

aa = pickle.dumps(foo)
f = open("test.text", "wb")  #  注意这里,要用 wb (二进制)模式写入。
f.write(aa)
f.close()

import pickle
def foo():
    print("ok")  # 由于众文件里取出的函数名没有内存地址,所以必须在这里还得有一个同样的函数。
f=open("test.text","rb")
data=f.read()
data=pickle.loads(data)
data()

在这里插入图片描述

import shelve

f = shelve.open("test.text")   # 它会同时建立三个文件,不用管,用时还使用test.text文件名就可以
f["info"] = {"name": "gf", "sex": "男"}
f["info1"]={"name":"小强","sex":"女"}
import shelve

f = shelve.open(r"test.text")
print(f.get("info"))
print(f.get("info1"))
data=f.get("info1")
print(data["name"])

在这里插入图片描述
补充一个知识点:

d={"name":"gf","age":"12"}
print(d["name"])
print(d.get("name"))   # 在取值时d.get("name")==d["name"],但不能全盘 get方法给字典赋值。
print(d.get("sex","mail"))  # d 里没有 sex 这个键值,默认返回 None 在后面加了 mail之后,返回 mail
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值