import pickle
filename = 'Student.txt'
class Student():
def __init__(self, number, name, chinese_score, math_score, english_score):
self.name = name
self.number = number
self.chinese_score = chinese_score
self.math_score = math_score
self.english_score = english_score
def __str__(self):
return f"number:{self.number}, name:{self.name}, chinese_score:{self.chinese_score}, math_score:{self.math_score}, english_score:{self.english_score}"
n = int(input('请输入学生个数:'))
lst = []
# lst1 = []
for i in range(0, n):
number = int(input('请输入学号:'))
name = input('请输入姓名:')
chinese_score = int(input('请输入语文成绩:'))
math_score = int(input('请输入数学成绩:'))
english_score = int(input('请输入英语成绩:'))
student = Student(number, name, chinese_score, math_score, english_score)
lst.append(student)
# student_dict = {'number': number, 'name': name, 'chinese_score': chinese_score, 'math_score': math_score,
# 'english_score': english_score}
# lst1.append(student_dict)
# 保存学生信息
def save():
with open(filename, 'wb') as wfile:
for item in lst:
pickle.dump(item, wfile) # 一次只能写一个对象
# 提取所有学生信息并打印
def readfile():
with open(filename, 'rb') as rfile:
student_old = []
while True:
try:
student1 = pickle.load(rfile) # 一次只能加载一个对象
student_old.append(student1) # 加载到的对象写入列表
except EOFError: # 读完退出循环
break
for item in student_old:
print(item)
# 复制所有学生信息到新的文件
def copymessage():
with open(filename, 'rb') as rfile:
student_old = []
while True:
try:
student1 = pickle.load(rfile)
student_old.append(student1)
except EOFError:
break
with open('copy.txt', 'wb') as wfile:
for item in student_old:
pickle.dump(item, wfile)
def main():
save()
readfile()
copymessage()
if __name__ == '__main__':
main()
Python:学生结构体实现以及二进制流文件实现文件保存输出及复制、pickle库中dump()及load()应用
于 2023-03-23 21:31:46 首次发布