Fork me on GitHub

json模块中的 dumps | loads dump | load ------- json 和 pickle 两个模块之间的区别

# ### json
"""
json 模块能够转化的数据类型如下: int float bool str list tuple dict None 8个数据类型可以序列化
json数据类型的提出,是让不同的语言之间形成数据交流
pickle返回的是二进制的字节流,它是用来进行数据的传输和存储的.

json   序列化成一个字符串
pickle 序列化成一个字节流
"""
import json
# dumps 和 loads 是一对,用来序列化和反序列化的,在字符串和其他数据类型之间切换
dic = {'name':"黄文","age":8,"sex":"男性","family":['爸爸',"妈妈"]}
# 序列化
'''
ensure_ascii=True 如果想要显示中文ensure_ascii = False 
sort_keys=True 对字典的键进行排序(默认按照ascii 从小到大排序)
'''
res = json.dumps(dic,ensure_ascii=False,sort_keys=True)
print(res,type(res))

# 反序列化
res = json.loads(res)
print(res,type(res))


# dump 和 load 是一对, 用来进行数据的存储和提取
dic = {'name':"黄文","age":8,"sex":"男性","family":['爸爸',"妈妈"]}
with open("ceshi001.json",mode="w",encoding="utf-8") as fp:
	json.dump(dic,fp,ensure_ascii=False)

with open("ceshi001.json",mode="r",encoding="utf-8") as fp:
	res = json.load(fp)

print(res,type(res))

# ###json 和 pickle 两个模块之间的区别;
# json
'''
可以连续dump,但是load只能一次性把所有数据拿出来进行反序列化,造成数据错误
针对于这个弊端,可以使用loads来解决
'''
dic = {'a':1,"b":2}
with open("ceshi002.json",mode="w",encoding="utf-8") as fp:
	json.dump(dic,fp)
	fp.write('\n')
	json.dump(dic,fp)
	fp.write('\n')

print("<===>")
with open("ceshi002.json",mode="r",encoding="utf-8") as fp:
	# res = json.load(fp)  error
	for  i in fp:
		# 读一行,反序列化成一个字典,依次循环.
		res = json.loads(i)
		print(res,type(res))


# pickle
'''
允许连续dump , 也允许连续load
'''
import pickle
dic = {'a':3,"b":4}
with open("ceshi003.pkl",mode="wb") as fp:
	pickle.dump(dic,fp)
	pickle.dump(dic,fp)
	pickle.dump(dic,fp)
	pickle.dump(dic,fp)

with open("ceshi003.pkl",mode="rb") as fp:
	'''
	res = pickle.load(fp)
	print(res)
	res = pickle.load(fp)
	print(res)
	res = pickle.load(fp)
	print(res)
	res = pickle.load(fp)
	print(res)
	'''
	# res = pickle.load(fp)
	# print(res)

	# 是否可以把所有数据都一次性拿出来?
	# 用try ... except ..抑制多调用的那一次的报错.
	try:
		while True:
			res = pickle.load(fp)
			print(res)
	except:
		pass
		
'''
# json 和 pickle 两个模块的区别:
(1)json序列化之后的数据类型是str,所有编程语言都识别,
   但是仅限于(int float bool)(str list tuple dict None)
   json不能连续load,只能一次性拿出所有数据
(2)pickle序列化之后的数据类型是bytes,
   所有数据类型都可转化,但仅限于python之间的存储传输.
   pickle可以连续load,多套数据放到同一个文件中
'''

  

posted @ 2019-05-24 22:15  MR_黄Python之路  阅读(321)  评论(0编辑  收藏  举报