加载中...

pickle和Json模块区别

pickle和Json模块 区别

json

  1. json序列化之后的数据类型是str,所有编程语言都识别,
  2. 但是仅限于(int float bool)(str list tuple dict None)
  3. 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

  1. pickle序列化之后的数据类型是bytes,用于数据存储
  2. 所有数据类型都可转化,但仅限于python之间的存储传输.
  3. 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  #异常不报错

posted @ 2024-03-04 00:59  江寒雨  阅读(22)  评论(0)    收藏  举报