# ### 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,多套数据放到同一个文件中
‘‘‘
json模块中的 dumps | loads dump | load ------- json 和 pickle 两个模块之间的区别
原文:https://www.cnblogs.com/huangjiangyong/p/10920485.html