采用二进制方式存储数据
- 本例和(一)的功能完全一样
- 代码基本不变,仅改变了学生信息的存取方式
- 学生信息存取用到pickle的dump和load方法——代码中的(1)、(2)俩处
import os
import pickle
class StudentManager:
def __init__(self):
self.__file__ = "a.dat"
self.__data__ = []
self.__load_data__()
def __load_data__(self):
if not os.path.exists(self.__file__):
return
fp = open(self.__file__, "rb") # 二进制方式读
self.__data__ = pickle.load(fp) # 使用pickle load方法 (1)
fp.close()
def save_data(self):
fp = open(self.__file__, "wb")
pickle.dump(self.__data__, fp) # 使用pickle dump方法 (2)
fp.close()
def append(self, name, sex, age):
self.__data__.append([name, sex, age])
def show(self):
for name, sex, age in self.__data__:
print(name, sex, age)
sm = StudentManager()
sm.append("张三", "男", 17)
sm.append("花木兰", "女", 16)
sm.show()
sm.save_data()
pickle模块
pickle模块是Python专用的持久化模块,可以持久化包括自定义类在内的各种数据,比较适合Python本身复杂数据的存贮。
pickle模块最常用的操作就是load和dump俩个方法,使用时需要注意文件打开时要以二进制方式打开("rb"或者"wb")。同时也要注意读写数据的顺序,如以下的存储过程:
a = [1, 2, 3]
b = ["张三", "李四" ]
pickle.dump(a, fp)
pickle.dump(b, fp)
在读取数据时,要记住先读取列表a,再读取列表b。