(7)python序列化与反序列化(json,pickle)
什么是序列化与反序列化?
什么叫序列化?把内存数据以指定格式 比如字符串存到文件
什么叫反序列化?把文件里的内容以原本格式获取到,以便正常使用
【0】用于序列化的两个模块(json & pickle)
用于序列化的两个模块
- json,用于字符串 和 python数据类型间进行转换,通用的:dumps 出来就是字符串
- pickle,用于python特有的类型 和 python的数据类型间进行转换:dumps 出来就是二进制
Json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load
【1】json
json 一般只适合简单的数据类型,比如字典、字符串、列表 等;
【1.1】基本序列化与反序列化
序列化
import json # 什么叫序列化?把内存数据以指定格式 比如字符串存到文件 f = open('test.txt','w') info = { 'name':'alex', 'age': 22 } f.write(json.dumps(info)) # 同等于 json.dump(info,f)
f.close()
反序列化
import pickle f = open("test.txt",'r') data = json.loads(f.read()) # 同等于 data = json.load(f) print(data) print(data["age"]) f.close()
【2】pickle
【2.1】pickle 序列化与反序列化
序列化
import pickle # 什么叫序列化?把内存数据以指定格式 比如字符串存到文件 f = open('test.txt','wb') info = { 'name':'alex', 'age': 22 } f.write(pickle.dumps(info)) #pickle.dumps出来的是二进制,所以要用 wb ,同等于 pickle.dump(info,f) f.close()
反序列化
import pickle f = open("test.txt",'rb') data = pickle.loads(f.read()) # 同等于 data = pickle.load(f) print(data) print(data["age"]) f.close()
【3】可以多次dump吗?不可以
【4】内置模块:shelve(推荐使用它来序列化和反序列化)
其实可以算是 pickle 的高级封装
import shelve
import datetime
# 存储
d = shelve.open('test_shelve') # 打开一个文件
info = {'age':22, 'job':'it'}
name = ["alex", "rain", "test"]
d["name"] = name # 持久化列表
d["info"] = info # 持久化字典
d["date"] = datetime.datetime.now()
d.close()
# 取出
d = shelve.open('test_shelve')
print(d.get("name"))
print(d.get("info"))
print(d.get("date"))
for get_info in d.items(): # 获取所有的条目
print(get_info)
d.close()
还有很多方法 需要自己研究一下;
核心存储,变成了这3个文件: