有没有办法把CSV中的一个结果放入一个变量中?

2024-09-30 08:21:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我在学校做了一个程序,对用户进行特定主题的测试,结果保存到csv文件中。我设法打印出得分最高的那一行,但这看起来不太整齐。你知道吗

with open ('reportForFergusTwo.csv', 'r') as highScore:
            highScoreFinder=highScore
            valid3=False
            for row in highScoreFinder:
                if subjectInput in row:
                    if difficultyInput in row:
                        if ('10' or '9' or '8' or '7' or '6' or '5' or '4' or '3' or '2' or '1') in row:
                            valid3=True
                            print("The highest score for this quiz is:",row)

例如:它说,“这个测验的最高分数是:chemistry,easy,10,Luc16”,但我更喜欢它说“这个测验的最高分数是:10”和“这个分数是由:Luc16获得的”,而不是仅仅打印整行,还有一些不必要的细节,比如测验的内容。你知道吗

我的CSV文件如下所示:

Subject,Difficulty,Score,Username
language,easy,10,Luc16
chemistry,easy,10,Luc16
maths,easy,9,Luc16
chemistry,easy,5,Eri15
chemistry,easy,6,Waf1
chemistry,easy,0,Eri15

我想,如果我能找到一种方法来获取单个结果(分数和用户名)并将它们放入自己的单个变量中,那么以我想要的方式呈现它会容易得多,如果我需要再次显示它们,那么以后可以在函数中引用它们。你知道吗

我只是对编码相当陌生,很好奇是否可以做到这一点,所以我可以改进代码的外观。你知道吗

编辑:为了解决这个问题,我用结构拆分()将“我的CSV”行中的独立字段拆分,以便可以通过变量选择和保存这些字段。接受的答案显示了我使用的解决方案,但这是我的最终代码,以防这不清楚

with open ('details.csv', 'r') as stalking:
        stalkingReader=csv.reader(stalking)
        valid4=False
        for column in stalkingReader:
            if user in column[3]:
                valid4=True
                print("Here are the details for user {}... ".format(user))
                splitter=row.split(',')
                name=splitter[0]
                age=splitter[1]
                year=splitter[2]
                print("Name: {}".format(name))
                print("Age: {}".format(age))
                print("Year Group: {}".format(year))
                postReport()
    if valid4==False:
        print("Sorry Fergus, this user doesn't seem to be in our records.")

Tags: orcsvinfalseformatforifeasy
3条回答
with open("reportForFergusTwo.csv", "r") as highScore:

    subject = []
    difficulty = []
    score = []
    name = []
    for line in highScore:
        subject.append(line.split(',')[0])
        difficulty.append(line.split(',')[1])
        score.append(line.split(',')[2])
        name.append(line.split(',')[3])

    ind = score.index(max(score)

    print("The highest score for this quiz is: ", max(score))
    print("This was achieved by ", name[ind])

with打开(并将关闭).csv文件。 然后,创建四个空列表。 接下来,我循环遍历文件中的每一行,并使用逗号作为分隔符拆分每一行。这将生成一个包含四个元素的列表,这些元素将附加到每个列表中。你知道吗

您可以使用str.split()来分解CSV的行,以便可以单独引用字段:

split_row = row.split(',')
score = split_row[2]
user = split_row[3]
print("The highest score for this quiz is: " + score)
print("This score was achieved by: " + user)

您可以使用csv库

import csv                                                                      

with open("data", "r") as f:                                                                         
    reader = csv.reader(f)                                                         
    # skip header                                                                  
    reader.next()                                                                  
    # organize data in 2D array                                                    
    data = [ [ sub, dif, int(score), name ] for sub, dif, score, name in reader ]
    # sort by score                                                                
    data.sort(key=lambda x: x[2], reverse=True)                                    
    # pretty print                                                                 
    print "The highest score for this quiz is:", data[0][2]                        
    print "This score was achieved by:", data[0][3]  

相关问题 更多 >

    热门问题