Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有办法将CSV的单个结果放入变量中?_Python_Python 3.6 - Fatal编程技术网

Python 有没有办法将CSV的单个结果放入变量中?

Python 有没有办法将CSV的单个结果放入变量中?,python,python-3.6,Python,Python 3.6,我在学校制作了一个程序,在这个程序中,用户被问及某些主题,他们的结果被保存到一个csv文件中。我设法打印出了得分最高的那一行,但这看起来不太整洁 with open ('reportForFergusTwo.csv', 'r') as highScore: highScoreFinder=highScore valid3=False for row in highScoreFinder: if

我在学校制作了一个程序,在这个程序中,用户被问及某些主题,他们的结果被保存到一个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)
例如:它说,这个测验的最高分数是:化学,简单,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
我想,如果我能找到一种方法,将个人结果——分数和用户名——放入他们自己的个人变量中,那么以我想要的方式呈现它就会容易得多,并且如果我需要再次显示它们,那么以后可以在函数中引用它们

我只是对编码相当陌生,很好奇这是否可以做到,这样我就可以改进代码的外观

编辑:为了解决这个问题,我使用str.split来分解CSV行中的indivudal字段,以便可以通过变量选择和保存它们。接受的答案显示了我使用的解决方案,但这是我的最终代码,以防不清楚

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.")
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.")
您可以使用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文件。 然后,创建四个空列表。
接下来,我循环遍历文件中的每一行,并使用逗号作为分隔符拆分每一行。这将生成一个包含四个元素的列表,这些元素被附加到每个列表中。

您可以使用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]  
代表OP发布解决方案

为了解决这个问题,我使用str.split来分解CSV行中的indivudal字段,这样就可以通过变量来选择和保存它们。接受的答案显示了我使用的解决方案,但这是我的最终代码,以防不清楚

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.")
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.")

那太好了,谢谢,试过了。我会接受答案,当它给我在八分钟内选择的时候:这不是我做的我投了更高的票,但这不算,因为我没有足够的声望点数,我想是那个给第二个的人answer@ErinJones没关系。很高兴我能帮助你,艾琳:只是一个简短的说明-学生们关于堆栈溢出的大多数帖子都不清楚,太宽或者太懒。然而,上面的内容写得很好,很清楚,有一个明确的目标,并且不假设用户可以看到您的屏幕。希望看到你在这里发布更多!艾琳,刚刚发现了你的更新。然而,我们更喜欢将答案贴在下面,而不是与问题合并。你能在下面复制并粘贴吗?谢谢。@halfer就可以了!