Python 有没有办法将CSV的单个结果放入变量中?
我在学校制作了一个程序,在这个程序中,用户被问及某些主题,他们的结果被保存到一个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
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就可以了!