json模块
json,用于字符串 和 python基本数据类型间进行转换
import json # json 支持跨平台,但仅支持基本的数据类型,用于字符串 和 python数据类型间进行转换 # Json模块提供了四个功能:dumps、dump、loads、load s = {"user": "pig","status": "50%"} data = json.dumps(s) # 序列化:将字典转换成字符串 print(data, type(data)) # 注意,json转换完的字符串类型的字典中的字符串是由""表示的 s1 = json.loads(data) # 反序列化:将一个字符串转换成一个字典 # 注意,要用json的loads功能处理的字符串类型的字典中的字符串必须由""表示 print(s1, type(s1)) # json的dumps和loads也可以处理嵌套的数据类型 li_s = [1, 2, 3, {"k1": "v1", "k2": [1, 2, 3], "k3":{"s1": "s2"}}] data_li = json.dumps(li_s) print(data_li, type(data_li)) data2 = json.loads(data_li) print(data2,type(data2)) # dump方法接收一个文件句柄,直接将字典转换成json字符串写入文件,可多次使用dump写入 f = open("json_file", "w") s = {"user": "pig", "status": "50%"} li_s = [1, 2, 3, {"k1": "v1", "k2": [1, 2, 3], "k3":{"s1": "s2"}}] json.dump(s, f) json.dump(li_s, f) f.close # load方法接收一个文件句柄,直接将文件中的json字符串转换成数据结构返回,只能读取一次,可以是嵌套的数据类型,且不能有多个不同类型的文件句柄 # f = open("json_file") # data3 = json.load(f) # print(data3, type(data3)) # 注意: # 在使用json.dumps时要注意一个问题 # print(json.dumps('中国'))输出的会是'中国'的ascii字符码,而不是真正的中文。 # 这是因为json.dumps序列化时对中文默认使用的ascii编码.想输出真正的中文需要指定ensure_ascii = False contry = {"国籍":"中国"} print(json.dumps(contry, ensure_ascii=False))
pickle模块
pickle,用于python特有的类型 和 python的数据类型间进行转换,不支持跨平台
import pickle, time s = {"user": "pig","status": "50%"} data1 = pickle.dumps(s) # 使用pickle的dumps序列化后是一串二进制内容,类型是bytes print(data1,type(data1)) dic1 = pickle.loads(data1) print(dic1,type(dic1)) # 反序列化后是正常的字典 f = open("file","wb") pickle.dump(time.localtime(1000000),f) f.close() f = open("file","rb") s = pickle.load(f) print(s)
shelve 模块
shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式
import shelve # 序列化: f = shelve.open("shelve_file") s = {"user": "pig","status": "50%"} li_s = [1, 2, 3, {"k1": "v1", "k2": [1, 2, 3], "k3":{"s1": "s2"}}] f["s"] = s f["li_s"] = li_s f.close() # 会生成三个文件,内容看不懂 # 反序列化 d = shelve.open("shelve_file") print(d["s"]) print(d["li_s"]) del d["s"] # 可以删除