17.json、pickle、shelve模块

一、json模块

1). json模块概述

  1. json格式内容为字符串
  2. json:前后端交互使用广泛的格式;配置文件的新宠儿
  3. 定义了不同语言之间的交互规则,跨平台的信息交互
  4. 模块导入方式
import json

2). 序列化与反序列化

data = {
    "name":"alex",
    "age":21,
    "gender":"male"
}
  1. 序列化
d = json.dumps(data)
  1. 反序列化
d2 = json.loads(d)
  1. 文件操作案例
with open("test.json","w") as f:
    json.dump(data, f)

with open("test.json","r") as f:
    data = json.load(f)
    print(data)

二、pickle模块

1). 概述

  1. 用法和json一样,唯一不同的就是序列化为bytes数据;
  2. 写入的方式为文件
  3. 支持python里面所有的数据,包括函数等‘
  4. 只能在python中使用,只能load一次,类比Java中的Serializable
  5. 模块导入方式
import pickle

2). 序列化与反序列化

  1. 数据的序列化与反序列化
import pickle

d = {"name":"alex", "gender":"male"}
with open("datapickle.pkl", "wb") as f:
    pickle.dump(d, f)
with open("datapickle.pkl", "rb") as f:
    obj = pickle.load(f)
    print(obj)
  1. 函数的序列化与反序列化
import pickle

def syhai():
    print("hi")

with open("datapickle.pkl", "wb") as f:
    pickle.dump(syhai, f)
with open("datapickle.pkl", "rb") as f:
    func = pickle.load(f)
    func()

三、shelve模块

1). 概述

  1. 将pickle进行了封装,类字典操作
  2. python之间使用
  3. 可以shelive多次
  4. 模块导入方式
import shelve

2). (反)序列化

# 序列化
dic = {"name":"alex","gender":"male"}
lis = [1,2,3,4,5,"rain"]
wit = (1,2,3,4)

with shelve.open("shelve_test") as f:
    f["dic"] = dic
    f["lis"] = lis
    f["wit"] = wit

# 反序列化
with shelve.open("shelve_test") as f:
    f.get("wit")
    f.keys()
    f.items()
    f["lis"] = [1,2,3] # 重新赋值(不能嵌套修改)
    f["new"] = "new"   # 创建
    del f["lis"]       # 删除

你可能感兴趣的:(17.json、pickle、shelve模块)