json与pickle库

eval()函数
# 简单的数据类型与字符串的互转
#---转换类型
demo_dic = {"name":"kobe", "num": 24}
s = str(demo_dic) 
print(type(s))   # >>> <class 'str'>
demo2 = eval(s)
print(demo2,type(demo2))   # >>> {'name': 'kobe', 'num': 24} <class 'dict'>

字符串中的内容若实际数据是简单的普通类型,则可以用eval进行转换为该数据类型,但是遇到特殊数据类型的时候,eval就不管用了;则需要通过使用json或者pickle

json序列化
# 使用json
# json.dumps(obj) 将简单数据类型转换为字符串类

import json
demo_dic = {"name":"kobe", "num": 24}  # 注意这里的字典中的引号需要使用双引号
f = open('test.txt','w')
# 将字典转化成字符串写入文件
f.write(json.dumps(demo_dic))
json反序列化
# json.loads(obj) 将json字符串类型转换为真实数据类型
f = open('test.txt', 'r')
# 将文件中的json字符串转换为内容真实数据类型
data = json.loads(f.read())
print(data,type(data))
pickle 只能在Python语言中使用

序列化与反序列化同json,只是转换时是bytes类型,而不在是字符串类型

1. 序列化
import pickle
demo_dic = {"name":"kobe", "num": 24}
a = pickle.dumps(demo_dic)
print(type(a))  # >>> <class 'bytes'> 注意这里是bytes类型

# 将转换完的bytes类型数据以对应的方式写入文件
f = open('test.txt','wb')
f.write(a)  

# 另一种写法 
pickle.dump(demo_dic,f)
f.close()

2.反序列化
# 将文件中的内容以bytes格式打开
f = open('test.txt', 'rb')
# 将获取打开的bytes内容转换成真实类型
data = pickle.loads(f.read())
print(data,type(data))  

# 另一种写法
data = pickle.load(f)
print(data,type(data))

# 输出结果如下:
{'name': 'kobe', 'num': 24} <class 'dict'>

为什么要引入与pickle
# demo  如下:复杂数据类型

def aaa(name):
	return name

demo_dic = {"name":"kobe", "num": 24, "func": aaa}

# 这里复杂数据类型使用eval函数反序列化
string = str(demo_dic)
print(string,type(string))
print(eval(string)   #  这里会报错!!!


# 这里复杂数据类型使用json.dumps()进行序列化
string = json.dumps(demo_dic)
print(string)   # 这里会报错!!! Object of type 'function' is not JSON serializable
# 这里复杂数据类型使用json.loads()进行反序列化
data = json.loads(string)
# data['func']('kobe')
print(data)   这里也会报错!!!

以上情况说明数据类型复杂了,eval()函数或者json就不管用了,所以需使用pickle的进行序列化与反序列化

string = pickle.dumps(demo_dic)  # 使用pickle.dumps()进行序列化
print(type(string))
data = pickle.loads(string)      # 使用pickle.loads()进行反序列化
print(type(data))

print(data)                      
print(data['func']('kobe'))      

# 输出结果如下
{'name': 'kobe', 'num': 24, 'func': <function aaa at 0x02F2A618>}
kobe
Python操作json数据常用方法
# 1、读取json
import json  
def read_json(path):
        with open(path,'r') as f:
                data=json.loads(f.read())
                return data

# 2、合并字典
def  merge_dict(data1,data2):
        data3=data1.copy()
        data3.updata(data2)
        return data3

# 3、字典数据直接覆盖写入json
def wirte_to_json(path, data):
    with open(path, 'w') as f:
        json.dump(data, f, indent=4)

# 4、字典'追加'写入json文件
def dict_to_json(data,path):
        data_json = read_json(path)
        data_new= merge_dict(data_json,data)
        with open (path,'w') as f: 
               json.dump(data_new,f,indent=4)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值