Python 将文本文件转换为列表,然后读取列表以确定条目是否在列表中
我在将文本文件转换为列表时遇到了一些问题。 文本文件如下所示:Python 将文本文件转换为列表,然后读取列表以确定条目是否在列表中,python,list,text,Python,List,Text,我在将文本文件转换为列表时遇到了一些问题。 文本文件如下所示: 5658845 4520125 7895122 8777541 8451277 1302850 8080152 我编写了接受用户输入并尝试确定用户输入是否在列表中的代码。然而,我在搜索列表时遇到了一些麻烦,因为我只能得到列表中最后一个结果的结果,我哪里出错了 def accountReader(): while True: chargeInput = (raw_input ("Enter a charge
5658845
4520125
7895122
8777541
8451277
1302850
8080152
我编写了接受用户输入并尝试确定用户输入是否在列表中的代码。然而,我在搜索列表时遇到了一些麻烦,因为我只能得到列表中最后一个结果的结果,我哪里出错了
def accountReader():
while True:
chargeInput = (raw_input ("Enter a charge account to be validated: "))
if chargeInput == '':
break
sys.exit
else:
chargeAccount = open('charge_accounts.txt', 'r')
line = chargeAccount.readline()
while line != '':
if chargeInput == line:
print chargeInput, 'was found in list.'
else:
print chargeInput, 'not found in list.'
break
chargeFile.close
我会像这样读清单
chargeAccount = open('charge_accounts.txt', 'r')
accts = [line.strip() for line in chareAccount]
if chareInput in accts:
#do something
else:
#do something else
至少从readline()中删除.strip(),您的行可能看起来像“5658845\n”
更新
因此,在测试了我的修改后,它可以正常工作……除了它对while帐户重复indef do!=''
这是我改变的
chargeAccount = open('charge_accounts.txt', 'r')
accts = [line.strip() for line in chargeAccount]
while accts != '':
if chargeInput in accts:
#...
我会彻底抛弃while循环,它要么在列表中,要么不在列表中。无需在每条线路上循环 我会这样读这份清单
chargeAccount = open('charge_accounts.txt', 'r')
accts = [line.strip() for line in chareAccount]
if chareInput in accts:
#do something
else:
#do something else
至少从readline()中删除.strip(),您的行可能看起来像“5658845\n”
更新
因此,在测试了我的修改后,它可以正常工作……除了它对while帐户重复indef do!=''
这是我改变的
chargeAccount = open('charge_accounts.txt', 'r')
accts = [line.strip() for line in chargeAccount]
while accts != '':
if chargeInput in accts:
#...
我会彻底抛弃while循环,它要么在列表中,要么不在列表中。无需在每条线路上循环 逐行细分:
def accountReader():
while True:
chargeInput = (raw_input ("Enter a charge account to be validated: "))
if chargeInput == '':
break
sys.exit
好的,到目前为止还不错。您已经创建了一个循环,该循环反复请求用户输入,当用户不输入任何内容时,该循环就会中断
else:
chargeAccount = open('charge_accounts.txt', 'r')
line = chargeAccount.readline()
这就是你开始遇到问题的地方readline
从chargeAccount
读取一行,并将其存储在line
中。这意味着您只能测试一行
while line != '':
if chargeInput == line:
print chargeInput, 'was found in list.'
这进一步加剧了你的问题。如果chargeInput==line,则打印一条消息,然后循环重复。由于循环中没有任何中断,这将导致无限循环,不断测试文件中的一行。此外,由于文件中的每一行都以换行符(\n
)结尾,chargeInput==line
将始终生成false(感谢Steven Rumbalski提醒我这一点)。使用.strip()
else:
print chargeInput, 'not found in list.'
break
chargeFile.close
这里,正如萨诺尔德指出的,你把你的文件命名错了;此外,它位于完全不同的代码块中,这意味着您可以重复打开chargeAccount
文件,而不关闭任何文件
正如你从matchw的帖子中看到的,有一种更简单的方法来做你想做的事情。但是我认为您最好弄清楚如何以您选择的样式正确地编写此代码。我给你一个提示:在最里面的while循环中应该有一个line=chargeAccount.readline()
。你明白为什么吗?此外,您可能应该在成功找到匹配项时退出循环,而不是在失败时退出循环。然后,您应该考虑一种在最内部的循环完成后测试搜索是否成功的方法 逐行细分:
def accountReader():
while True:
chargeInput = (raw_input ("Enter a charge account to be validated: "))
if chargeInput == '':
break
sys.exit
好的,到目前为止还不错。您已经创建了一个循环,该循环反复请求用户输入,当用户不输入任何内容时,该循环就会中断
else:
chargeAccount = open('charge_accounts.txt', 'r')
line = chargeAccount.readline()
这就是你开始遇到问题的地方readline
从chargeAccount
读取一行,并将其存储在line
中。这意味着您只能测试一行
while line != '':
if chargeInput == line:
print chargeInput, 'was found in list.'
这进一步加剧了你的问题。如果chargeInput==line
,则打印一条消息,然后循环重复。由于循环中没有任何中断,这将导致无限循环,不断测试文件中的一行。此外,由于文件中的每一行都以换行符(\n
)结尾,chargeInput==line
将始终生成false(感谢Steven Rumbalski提醒我这一点)。使用.strip()
else:
print chargeInput, 'not found in list.'
break
chargeFile.close
这里,正如萨诺尔德指出的,你把你的文件命名错了;此外,它位于完全不同的代码块中,这意味着您可以重复打开chargeAccount
文件,而不关闭任何文件
正如你从matchw的帖子中看到的,有一种更简单的方法来做你想做的事情。但是我认为您最好弄清楚如何以您选择的样式正确地编写此代码。我给你一个提示:在最里面的while循环中应该有一个line=chargeAccount.readline()
。你明白为什么吗?此外,您可能应该在成功找到匹配项时退出循环,而不是在失败时退出循环。然后,您应该考虑一种在最内部的循环完成后测试搜索是否成功的方法 有一个chargeFile
在末尾关闭,但从未打开<代码>费用帐户
已打开但从未关闭。这真的是您遇到问题的代码吗?:)尝试调试重新键入的问题并没有多大乐趣。复制粘贴为王。:)哦,对不起,大脑现在有点混乱,一直在循环使用这个代码,它有点被砍掉和改变,因为我尝试了其他解决方案。chargefile.close实际上是chargeAccount.close在我的代码中有一个chargefile
在末尾关闭,但从未打开<代码>费用帐户已打开但从未关闭。这真的是您遇到问题的代码吗?:)尝试调试重新键入的问题并没有多大乐趣。复制粘贴为王。:)哦,对不起,大脑现在有点混乱,一直在循环使用这个代码,它有点被砍掉和改变,因为我尝试了其他解决方案。chargefile.close在我的代码中实际上是chargeAccount.close,这是另一个问题<代码>行以换行符结尾,而chargeInput没有换行符,这意味着即使他比较每个值,它们也不会