pickle和Json模块 区别
json
- json序列化之后的数据类型是str,所有编程语言都识别,
- 但是仅限于(int float bool)(str list tuple dict None)
- json不能连续load,只能一次性拿出所有数据
dic1 = {"a":1,"b":2}
dic2 = {"c":3,"d":4}
with open("lianxi4.json",mode="w",encoding="utf-8") as fp:
json.dump(dic1,fp)
fp.write("\n")
json.dump(dic2,fp)
fp.write("\n")
with open("lianxi4.json",mode="r",encoding="utf-8") as fp:
dic = json.load(fp)
# 不能连续load,是一次性获取文件所有数据 , error
"""
with open("lianxi4.json",mode="r",encoding="utf-8") as fp:
dic = json.load(fp)
"""
# 解决办法 loads(分开读取)
with open("lianxi4.json",mode="r",encoding="utf-8") as fp:
for line in fp: #按行遍历fp文件迭代器
dic = json.loads(line) #反解dic
print(dic,type(dic))
pickle
- pickle序列化之后的数据类型是bytes,用于数据存储
- 所有数据类型都可转化,但仅限于python之间的存储传输.
- pickle可以连续load,多套数据放到同一个文件中
import pickle
# pickle => dump 和 load
# pickle 连续dump数据,也可以连续load数据 能自己分辨分界符
with open("lianxi5.pkl",mode="wb") as fp:
pickle.dump(dic1,fp)
pickle.dump(dic2,fp)
pickle.dump(dic1,fp)
pickle.dump(dic2,fp)
# 反解方法一
with open("lianxi5.pkl",mode="rb") as fp:
dic1 = pickle.load(fp)
dic2 = pickle.load(fp)
print(dic1)
print(dic2)
# 方法二 (扩展)
"""try .. except .. 把又可能报错的代码放到try代码块中,如果出现异常执行except分支,来抑制报错"""
try:
with open("lianxi5.pkl",mode="rb") as fp:
while True:
dic = pickle.load(fp)
print(dic)
except:
pass #异常不报错