我是python的新手(一周),所以我希望我能正确地提出这个问题。
我已将csv格式的成绩单导入python 2.7。第一列是学生的姓名,列标题是作业的名称。所以数据看起来像这样:
Name Test1 Test2 Test3
Robin 89 78 100
...
Rick 72 100 98
我希望能够通过输入此人的姓名和作业来做(或让别人做)3件事。 1.为该作业获得该人的分数 2.获得该作业的平均分数 3.获得那些人的平均分数
但由于某种原因,我迷失了如何让python识别我想要调用的字段。到目前为止,这就是我所拥有的(到目前为止唯一有效的部分是调用文件):
data = csv.DictReader(open("C:\file.csv"))
for row in data:
print row
def grade()
student= input ("Enter a student name: ")
assignment= input("Enter a assignment: ")
for row in data:
task_grade= data.get(int(row["student"], int(row["assignment"])) # specific grade
task_total= sum(int(row['assignment'])) #assignment total
student_total= #student assignments total-- no clue how to do this
task_average= task_total/11
average_score= student_total/9
答案 0 :(得分:2)
您可以通过以下方式访问csv的各个“列”:
import csv
def parse_csv():
csv_file = open('data.csv', 'r')
r = csv.reader(csv_file)
grade_averages = {}
for row in r:
if row[0].startswith('Name'):
continue
#print "Student: ", row[0]
grades = []
for column in row[1:]:
#print "Grade: ", column
grades.append(int(column.strip()))
grade_total = 0
for i in grades:
grade_total += i
grade_averages[row[0]] = grade_total / len(grades)
#print "grade_averages: ", grade_averages
return grade_averages
def get_grade(student_name):
grade_averages = parse_csv()
return grade_averages[student_name]
print "Rick: ", get_grade('Rick')
print "Robin: ", get_grade('Robin')
答案 1 :(得分:1)
您要做的不是Python,因为您有键和值。然而...
如果您知道列始终相同,则无需使用关键字,您可以使用以下位置:
以下是执行1和3的简单,低效的方法:
students_name = ...
number = ...
for line in open("C:\file.csv")).readlines()
items = line.split()
num_assignments = len(items)-1
name = items[0]
if name = students_name:
print("assignment score: {0}".format(items[number]))
asum = 0
for k in range(0,num_assignments):
asum+= items[k+1]
print("their average: {0}".format(asum / num_assignments)
要做2,你应该预先计算平均值并返回它们beucase每个分配的平均值对于每个用户查询是相同的。
我说easy * innefficnet因为每次输入名称时都会搜索每个用户查询的文本文件。要正确地做,你应该建立一个包含所有名称及其信息的字典。但是这个解决方案更复杂,你只有一个星期了!而且,它的时间越长,你就应该试一试。查看dict
。
答案 2 :(得分:0)
我相信你第二次看不到该字段的原因是因为csv.DictReader()
返回的迭代器是一次性迭代器。也就是说,一旦你到达csv文件的最后一行,它就不会重置到第一个位置。
所以,通过这样做:
data = csv.DictReader(open("C:\file.csv"))
for row in data:
print row
你正在运行它。尝试评论这些行,看看是否有帮助。