Python序列化统计学生成绩案例

一份文件中保存的是各位同学的各科成绩,编写程序计算出各位同学的总成绩写入文件中每行末尾

保存学生成绩的文件格式:Python序列化统计学生成绩案例_第1张图片

思考方向:

1、先把原文件按照格式(字符串或是列表)内容写入文件,文件位置可直接保存在相对路径下;

2、打开原文件内容并统计各学生的总成绩保存;

3、打开源文件,并以覆盖形式重新写入内容;

4、打开文件,读取全部内容到内存,验证;

考查点:

  1. 文件内容依次读取【每一行】内容,并全部以【列表】形式显示,使用:file.readlines()
  2. 读取文件【全部内容】,并以【字符串】形式显示,使用:file.read()
  3. 只读取文件【第一行】内容,使用:file,readline()
  4. 将【字符串格式】写入文件,使用:file.write()
  5. 将【列表格式】写入文件,使用:file.writelines()
  6. 字符串转列表方法:str.split()
  7. 列表转字符串方法:" ".join(list_name)
  8. 字符串和列表追加内容:str_name/list_name.append(str/list)
  9. 列表取值,用下标格式:list_name[index]
#coding:utf8
#   第一步 将原始数据写入文件
file = open('abc.txt','w',encoding='utf8')
string='a1\t70\t80\t90\t\n' \
       'a2\t80\t85\t95\t\n' \
       'a3\t90\t70\t80\t\n'
file.write(string)  # 写入文件,字符串用write()
file.close()
#   第二步 从原始文件中读取数据并计算每个学生的成绩总和,最后将每个学生的信息以单位字符串转成列表保存
file1 = open('abc.txt',encoding='utf8')  # 打开文件,默认选项缺省,即为读模式
file1_str = file1.readlines()  # 将文件内容读取到列表中,以每一个学生为一个单位,一个单位是以字符串。
# print(file1_str)
file_list_new = []  # 新建一个列表
for stu in file1_str:  # 遍历学生列表信息
    # print(stu)
    stu_grade = stu.split()  # 将每个单位学生信息转换成列表
    # print(stu_grade)
    x = int(stu_grade[1])  # 分别定义变量接受stu_grade[]中的成绩,注意下标是从0开始计算,这里成绩在第二个,下表是1
    y = int(stu_grade[2])
    z = int(stu_grade[3])
    sum_grade = x+y+z  # 计算总成绩
    # print(sum_grade)
    stu_grade.append(str(sum_grade))  # 将总成绩转成字符串并追加到列表stu_grade[]中
    # print(stu_grade)
    stu_grade_str = '\t'.join(stu_grade)+'\n'  # 将列表转换成字符串格式
    # print(stu_grade_str)
    file_list_new.append(stu_grade_str)  # 将字符串依次追加到定义的空列表中
# print(file_list_new)
file1.close()  # 关闭资源
#   第三步 读取源文件,以覆盖的方式将第二步保存的列表形式内容写进文件
file2 = open('abc.txt','w',encoding='utf8')  # 打开文件,以写的方式将原来的文件覆盖,因为追加是追加在最后面,与此处不符合。
file2.writelines(file_list_new)  # 将上面的列表逐行写入文件,注意,列表写入用 writelines()
file2.close()
#   第四步 验证答案
file3 = open('abc.txt',encoding='utf8')
file3_string=file3.read()  # 读取文件全部内容
print(file3_string)
file3.close()

验证结果:

               

你可能感兴趣的:(Python)