1. json序列化模块
# ### json """ 所有编程语言都能够识别的数据格式叫做json,是字符串 json: 将数据类型序列化成字符串 pickle:将数据类型序列化成字节流 json能够转换的数据类型: int float bool str list tuple dict None """ import json # ### (1) json基本语法 """dumps 和 loads 是一对,用来序列化和反序列化数据的 ensure_ascii = False : 显示中文 sort_keys = True : 对字典的键进行排序 """ # dumps 把任意对象序列化成一个str dic = {"name":"常远","age":20,"sex":"男性","family":["爸爸","妈妈","妹妹"]} res = json.dumps(dic,ensure_ascii=False,sort_keys=True) print(res,type(res)) # loads 把任意str反序列化成原来数据 dic = json.loads(res) print(dic,type(dic)) """dump 和 load 是一对,根据文件进行操作存储""" dic = {"name":"常远","age":20,"sex":"男性","family":["爸爸","妈妈","妹妹"]} with open("ceshi1.json",mode="w",encoding="utf-8") as fp: json.dump(dic,fp,ensure_ascii=False) with open("ceshi1.json",mode="r",encoding="utf-8") as fp: dic = json.load(fp) print(dic , type(dic)) # ### (2)json 和 pickle之间的区别 # json """ json可以连续dump , 但是不能连续load load 是一次性拿出所有数据进行反序列化 """ dic1 = {"a":1,"b":2} dic2 = {"c":3,"d":4} with open("ceshi2.txt",mode="w+",encoding="utf-8") as fp: json.dump(dic1,fp) fp.write("\n") json.dump(dic2,fp) fp.write("\n") # 不能够把两个字典都识别出来 """ # error with open("ceshi2.txt",mode="r",encoding="utf-8") as fp: res = json.load(fp) print(res) """ # 文件对象是迭代器 from collections import Iterator res = isinstance(fp,Iterator) print(res) # loads方法来识别出每一个字典 with open("ceshi2.txt",mode="r+",encoding="utf-8") as fp: for i in fp: # print(i,type(i)) dic = json.loads(i) print(dic ,type(dic) ) # pickle """ pickle 可以连续dump , 也可以连续load pickle在插入数据时,在数据末尾写了结束的标识符,所以可以识别各个数据 """ import pickle dic1 = {"a":1,"b":2} dic2 = {"c":3,"d":4} with open("ceshi3.pkl",mode="wb") as fp: pickle.dump(dic1,fp) pickle.dump(dic2,fp) # 可以连续load print("<===>") with open("ceshi3.pkl",mode="rb") as fp: """ dic = pickle.load(fp) print(dic,type(dic)) dic = pickle.load(fp) print(dic,type(dic)) """ try: while True: dic = pickle.load(fp) print(dic) except: pass """ try .. except .. try: 把有问题的代码写到try代码块中 except: 如果发生了报错,直接执行except这个代码块 """ """ # 总结: # json 和 pickle 两个模块的区别: (1)json序列化之后的数据类型是str,所有编程语言都识别, 但是仅限于(int float bool)(str list tuple dict None) json不能连续load,只能一次性拿出所有数据 (2)pickle序列化之后的数据类型是bytes, 所有数据类型都可转化,但仅限于python之间的存储传输. pickle可以连续load,多套数据放到同一个文件中 """