如何使用 csv 使 Python 读取一行中的第一个单词而不是第一个字符?
How can I make Python using csv read the first word in a line rather than the first character?
我在这里四处寻找解决方案,虽然它们似乎符合我的需要,但最终对我不起作用。我不是特别确定为什么。我会尝试说明问题所在,希望您能够说明为什么会有所不同。
所以,我一直在尝试使用 Tkinter GUI 制作一个简单的用户名和密码登录系统。我已经尝试通过将用户名和密码放在外部 CSV 文件中来完成这项工作,然后使用我的程序,一旦我的游戏已经运行的两个用户都尝试登录,逐行读取我的 csv 文件(称为“Accepted Users for Card Game.csv”),它与程序位于同一文件夹中,因此不需要其他目录。我试过让用户将他们的用户名和密码放入不同的 Tkinter 条目,然后按下它下面的按钮。该程序然后检查是否,例如 line[0] == PlayerOneUsername and line[1] == PlayerOnePassword
,但是每次我尝试这个时,它都不起作用。 (我的分隔符是',',对于任何想知道的人)。
在让它打印它正在阅读的内容后,我发现它总是 returns 该行的第一个字符而不是第一个单词,所以它当然总是不正确。我已经搜索了一个答案,其中一些我已经在尝试了,但是每次我尝试实施它时,似乎都出现了同样的问题。 (EG line.split() 没有解决我的问题)。
This is the output on comparing the line and line[0] next to each other. (Ignore the colours and the title afterwards, those are to do with the game).
这是当您按下按钮时触发的我的播放器 2 评估的部分(它或多或少与我的播放器 1 评估相同):
Success["text"] = ""
if not PasswordLoginInputTwo.get() or not UsernameLoginInputTwo.get():
Success["text"] = "One or more of your password/username entries are empty. Please try again."
else:
csvfile = open ("Accepted Users for Card Game.csv", "r")
Csvreader = csv.reader(csvfile, delimiter = ',')
Success["text"] = "Player Two password/username combination has been read."
for line in csvfile:
print(line[0])
if line:
print(line)
print(line[0])
if line.split(None, 1)[0] == UsernameLoginInputTwo.get() and line.split(None, 1)[1] == PasswordLoginInputTwo.get():
PlayerTwoSuccess = True
PlayerTwoUsername = UsernameLoginInputTwo.get()
PlayerTwoColour = line[2]
PlayerTwoAntithesis = line[3]
PlayerTwoVictorSound = "Victory - "+line[4]+".wav"
PlayerTwoAttempts = PlayerTwoAttempts + 1
外部csv文件只是以简单的行格式排列,像这样:
PlayerOne,Password1,Purple,Yellow,Donkey Kong
PlayerTwo,Password2,Red,Green,Final Fantasy
PlayerThree,Password3,Pink,Purple,Worms
PlayerFour,Password4,Black,White,Team Fortress 2
我知道答案可能很明显,但我很生气我似乎找不到答案!顺便说一下,我正在使用 Python 2.7,但我不打算继续使用它。 (你可能会说,我对 Python 非常陌生,所以请解释任何解决方案,就像我非常愚蠢一样 - 尽管你可能已经从我的代码和整个问题中得到了这种印象哈哈)。谢谢!
所以基本上,重复一下,我的印象是行[0] 应该是我的'line' 中的第一个'word',在本例中是例如“PlayerOne”。相反,它给了我第一个字符,在本例中为 'P'。我该如何纠正这个问题?是什么原因造成的?我怎样才能让它成为第一个 单词 而不是第一个 字符 ?谢谢!
您正在迭代:
for line in csvfile:
这将 return 一个 string 表示第一行。您需要遍历 reader 对象:
for line in Csvreader:
然后,line 将是 字符串的元组 在分隔符上拆分。
我在这里四处寻找解决方案,虽然它们似乎符合我的需要,但最终对我不起作用。我不是特别确定为什么。我会尝试说明问题所在,希望您能够说明为什么会有所不同。
所以,我一直在尝试使用 Tkinter GUI 制作一个简单的用户名和密码登录系统。我已经尝试通过将用户名和密码放在外部 CSV 文件中来完成这项工作,然后使用我的程序,一旦我的游戏已经运行的两个用户都尝试登录,逐行读取我的 csv 文件(称为“Accepted Users for Card Game.csv”),它与程序位于同一文件夹中,因此不需要其他目录。我试过让用户将他们的用户名和密码放入不同的 Tkinter 条目,然后按下它下面的按钮。该程序然后检查是否,例如 line[0] == PlayerOneUsername and line[1] == PlayerOnePassword
,但是每次我尝试这个时,它都不起作用。 (我的分隔符是',',对于任何想知道的人)。
在让它打印它正在阅读的内容后,我发现它总是 returns 该行的第一个字符而不是第一个单词,所以它当然总是不正确。我已经搜索了一个答案,其中一些我已经在尝试了,但是每次我尝试实施它时,似乎都出现了同样的问题。 (EG line.split() 没有解决我的问题)。
This is the output on comparing the line and line[0] next to each other. (Ignore the colours and the title afterwards, those are to do with the game).
这是当您按下按钮时触发的我的播放器 2 评估的部分(它或多或少与我的播放器 1 评估相同):
Success["text"] = ""
if not PasswordLoginInputTwo.get() or not UsernameLoginInputTwo.get():
Success["text"] = "One or more of your password/username entries are empty. Please try again."
else:
csvfile = open ("Accepted Users for Card Game.csv", "r")
Csvreader = csv.reader(csvfile, delimiter = ',')
Success["text"] = "Player Two password/username combination has been read."
for line in csvfile:
print(line[0])
if line:
print(line)
print(line[0])
if line.split(None, 1)[0] == UsernameLoginInputTwo.get() and line.split(None, 1)[1] == PasswordLoginInputTwo.get():
PlayerTwoSuccess = True
PlayerTwoUsername = UsernameLoginInputTwo.get()
PlayerTwoColour = line[2]
PlayerTwoAntithesis = line[3]
PlayerTwoVictorSound = "Victory - "+line[4]+".wav"
PlayerTwoAttempts = PlayerTwoAttempts + 1
外部csv文件只是以简单的行格式排列,像这样:
PlayerOne,Password1,Purple,Yellow,Donkey Kong
PlayerTwo,Password2,Red,Green,Final Fantasy
PlayerThree,Password3,Pink,Purple,Worms
PlayerFour,Password4,Black,White,Team Fortress 2
我知道答案可能很明显,但我很生气我似乎找不到答案!顺便说一下,我正在使用 Python 2.7,但我不打算继续使用它。 (你可能会说,我对 Python 非常陌生,所以请解释任何解决方案,就像我非常愚蠢一样 - 尽管你可能已经从我的代码和整个问题中得到了这种印象哈哈)。谢谢!
所以基本上,重复一下,我的印象是行[0] 应该是我的'line' 中的第一个'word',在本例中是例如“PlayerOne”。相反,它给了我第一个字符,在本例中为 'P'。我该如何纠正这个问题?是什么原因造成的?我怎样才能让它成为第一个 单词 而不是第一个 字符 ?谢谢!
您正在迭代:
for line in csvfile:
这将 return 一个 string 表示第一行。您需要遍历 reader 对象:
for line in Csvreader:
然后,line 将是 字符串的元组 在分隔符上拆分。