Python:学生结构体实现以及二进制流文件实现文件保存输出及复制、pickle库中dump()及load()应用

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()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值