python-json&pickle模块(序列化模块)
什么叫序列化?
就是把内存里的数据存到硬盘上。
为什么要把了内存里的数据存在硬盘上?
1.程序在运行,关闭了,内存数据丢失。
2.下次程序再启动,再从硬盘上读回来,还是原来的格式的话,那是极好的。
3.内存里的数据多为嵌套字典的形式。
把内存数据取出来有什么意义?
1.把内存数据,通过网络 共享给其他人。
2.可以跨平台、跨语言共享数据。eg:c、java、python
#1.json 用法 # dumps 序列化 import json data = {'k1': 123, 'k2': 345} # 把data序列化成字符串 d = json.dumps(data) print(d, type(d)) # 把data序列化成字符串并存入文件 f = open('test.json', 'w') json.dump(data, f) # 把序列化字符串转回字典 d2 = json.loads(d) print(d2['k1']) # 把data序列化成字符串并存入文件 f = open('test.json', 'r') data2 = json.load(f) print(data2, type(data2))
注意:dump可以写多次,但是load只能是一次。会报json反序列化错误。
2.pickle
注意:open方法时,只能用‘wb’或‘rb’。
# 2.pickle 用法 import pickle # data2 = {'k1': 123, 'k2': 345} pk = open('data.pkl', 'wb') d2 = pickle.dump(data2, pk) print(d2) # 把data序列化成字符串并存入文件 f2 = open('data.pkl', 'rb') data3 = pickle.load(f2) print(data3, type(data3))
pickle和json 有什么区别呢?
json 支持:字符串、列表、字典、等类型序列化 json在其他平台的语音都能使用。
pickle 支持:全部的类型、包括函数 但是pickle只在python中特有
shelve模块(持久化)
它与json、pickle 的区别是,shelve模块是对pickle的封装,是python独有的,允许load多次
import shelve # 2.反持久化操作(load) f = shelve.open('shelve_test') print(list(f.items())) print() # 1. 查 print(f['names']) # 查列表里的值 print(f['info_dic']['name'], f['info_dic']['age']) # 取列表中字典的值 # 2. 改 # 修改列表的值 ,只能整体替换。 new_lst = ['A', 'b', 'C'] f['names'] = new_lst print(f['names']) # 修改列表里字典的值 ,只能整体替换。 new_dic = {'name': 'abc', 'age': 30} f['info_dic'] = new_dic print(f['info_dic']) # 删 f.popitem() print(list(f.items()))