代码说明
- 此例仅模拟学生信息的
保存
,读取
及添加
功能。
- 读文件时,用readline()逐行读取。注意调用 strip() 方法去掉末尾的换行符。
- 写文件时,三个字段间用"&&&"分隔,末尾手动加上换行符。
- 注意 读/写 文件操作要相互对应,以免出错。
import os
class StudentManager:
def __init__(self):
# __init__在创建类对象时调用,下边的”sm = StudentManger()“时会自动调用
self.__file__ = "a.dat"
# __data__列表用来存放学生数据
# 类中的变量名或者方法前面加双下划线表示禁止外部调用。
# 如:sm.save_data() 可以执行,而sm.__load_data__()会出错。
self.__data__ = []
# 程序运行初直接载入文件中的数据
self.__load_data__()
def __load_data__(self):
if not os.path.exists(self.__file__):
# 若文件不存在
return
fp = open(self.__file__, "r") # 只读方式打开, 参数 "r" 等价于 "rt",,"t" 为默认方式
while line := fp.readline().strip():
_name, _sex, _age = line.split("&&&")
self.__data__.append([_name, _sex, int(_age)])
fp.close() # 用完后记得关闭文件,否则下次打开时会出意外
def save_data(self):
fp = open(self.__file__, "w")
for _name, _sex, _age in self.__data__:
# 姓名、性别、年龄间用 ”&&&“ 分隔。
fp.write("{}&&&{}&&&{}\n".format(_name, _sex, _age))
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()