python 的json和pickle数据序列化

#eval()函数:把字符串当成有效的表达式求值并返回计算结果
#print(eval("1+1"))
#json序列化
#json写一个字典型文件进磁盘
import json
a={"name":"gongwei","age":24}#写进磁盘,序列化
with open("test","w",encoding="utf-8") as f:
    f.write(json.dumps(a))#因为写进去必须是字符串,所以要先转化成字符串 等同于json.dump(a,f)
with open("test","r",encoding="utf-8") as f:#从磁盘中读取数据,反序列化
    alls=json.loads(f.read())#读取的是字符串,所以读完后需要恢复,所以用这语法 等同于alls=json.load(f)
    print(alls["name"])
#json如果需要写入函数,类等,就是报错,报错为函数,类不是json可以序列化的。这时候就需要用pickle
import pickle
#pickle用户python特有的数据类型,用于python之间的数据交换
def sayhello(name):
    print("hello %s"%name)
b={"name":"gongwei","age":24,"func":sayhello}
with open("test1","wb") as f1:#因为pickle.dumps,默认为二进制
    print(type(pickle.dumps(b)))
    f1.write(pickle.dumps(b))#等同于    pickle.dump(b,f1)

with open("test1","rb") as f2:#注意如果是在另一个程序中反序列化,会报错,因为已经def定义的已经回收了。还有就是序列化序列的是一个对象,只要函数名一样,就可以,不管里面内容如何
    b1=pickle.loads(f2.read())#等同于b1=pickle.load(f2)
    print(b1["func"]("gw"))
import json#在python 3中,dump很多次,却不能load对应次数,因此注意,最好以后dump、load 一次
a={"name":"gongwei","age":24}
with open("test3","w",encoding="utf-8") as f:
     json.dump(a,f)
     a["name"]="xujign"
     json.dump(a,f)
with open("test3","r",encoding="utf-8") as f1:
    # json.loads(f1.read())对应loads次数会报错
    # json.loads(f1.read())
    for line in f1:
        print(line)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值