1. json序列化模块

day15-Python运维开发基础(json序列化模块、random / time / zipfile / OS模块函数)

 

 

# ### 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,多套数据放到同一个文件中
"""
json序列化模块 示例代码

相关文章:

  • 2022-12-23
  • 2022-03-05
  • 2021-10-11
  • 2021-09-25
  • 2021-08-19
  • 2021-05-18
  • 2022-12-23
猜你喜欢
  • 2021-06-12
  • 2021-07-22
  • 2021-12-03
  • 2022-12-23
  • 2022-03-04
  • 2021-09-17
相关资源
相似解决方案