(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个文件:

  

 

posted @ 2020-11-18 15:58  郭大侠1  阅读(116)  评论(0编辑  收藏  举报