我有以下输入:
ID, Last, First, Lecture, Tutorial, A1, A2, A3, A4, A5
10034567, Smith, Winston, L01, T03, 6, 5.5, 8, 10, 8.5
10045678, Lee, Bruce, L02, T05, 4.5, 6.5, 7, 7, 8.5
00305678, Obama, Jack, L01, T05, 10, 10, 9, 9.5, 10
00567890, Brown, Palin, L02, T03, 4, 7.5, 6.5, 0, 5
10012134, Harper, Ed, L01, T03, 10, 9, 7.5, 10, 6.5
10014549, Johnson, Andrew, L01, T05, 10, 0, 10, 5.5, 7
10020987, Clockwork, Milan, L02, T03, 10, 8.5, 8, 9, 9
10021234, Freeman, Skyski L01, T02, 0, 10, 10, 10, 8.5
EOF
文件的第一行解释了每一列数据。设 n 为学生总数,则文件的下 n 行每行对应班级中的一名学生,并包含 10 个字段:
学生卡
姓
名
讲座部分
教程部分
作业 1 的成绩(等等......)
假设成绩存储在一个文件中,grades.txt
那么您可以使用以下 Python 语句将文件的整行读入 Python 字符串 s:
file = open (‘grades.txt’, ‘r’)
s = file.readline()
您只需打开文件一次,然后您可以readline()
多次使用该功能,每次读取连续的一行。在学生记录的 n 行之后,文件以最后一行表示EOF
short for结束End of File
。
数字 n 不是已知的优先级。样本输入无关紧要,它可以包含 100 到 300 名学生,在一个名为grades.txt
“我们希望最终为作业 1 的成绩分布绘制直方图”的文件中。因此,您需要通过处理他/她来提取每个学生的 A1 成绩文件中的对应行。构建一个列表,每个学生都有一个条目,存储他/她的 A1 成绩。每次提取新的 A1 成绩时,将其附加到此列表中。
到目前为止,这就是我所做的:
file = open('grades.txt','r')
s = file.readline()
for line in file:
newline = str(line)
grades = newline.split(",")
if len(grades)<=4:
break
elif len(grades)>5:
break
else:
grades = [float(x) for x in grades]
gradeA1 = grades[5]
print(gradeA1)
但是,我只得到第一级6
而不是任何连续行的其他 A1 成绩,所有 A1 成绩都应该汇总到一个列表中。
我有这个作为我编辑的代码,但我仍然得到一个错误。
file = open('grades.txt','r')
s = file.readline()
for s in file:
s = file.readline()
grades = s.split(",")
if grades=='EOF\n':
break
A1grades = [float(x) for x in grades[5]]
print(A1grades)
我得到一个索引超出范围错误。