将文本文件转换为列表,然后读取列表以确定条目是否在列表中
我在将文本文件转换为列表时遇到了一些问题。 文本文件,提出这样的:将文本文件转换为列表,然后读取列表以确定条目是否在列表中
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
一条线,由线故障:
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
将始终产生错误(感谢Steven Rumbalski提醒我这一点)。使用.strip()
(如matchw的答案中所示),或者,如果您可以容忍部分匹配,则可以使用Python的简单子字符串匹配功能:if chargeInput in line
。
else:
print chargeInput, 'not found in list.'
break
chargeFile.close
在这里,正如sarnold指出的,你错误地命名了你的文件;此外,它处于完全不同的代码块中,这意味着您可以反复打开chargeAccount
文件而不关闭任何文件。
正如你从matchw的帖子中看到的,有一种更简单的方式来做你想做的事情。但是我认为你应该好好弄清楚如何以你选择的风格正确编写代码。我会给你一个提示:里面应该有一个line = chargeAccount.readline()
最内层while循环。你明白为什么?此外,当你在成功找到一个匹配,而不是失败时,你应该退出循环。那么你应该考虑一种方法来测试在最内层循环完成后搜索是否成功。
一个额外的问题。 'line'以换行符结束,而chargeInput不会,这意味着即使他比较每个值,它们也不会是匹配。 – 2011-05-23 03:43:34
@Steven Rumbalski,谢谢你提醒我。 – senderle 2011-05-23 04:14:40
我会读列表这样
chargeAccount = open('charge_accounts.txt', 'r')
accts = [line.strip() for line in chareAccount]
if chareInput in accts:
#do something
else:
#do something else
起码.strip()关闭的ReadLine(),您的线路可能看起来像 '5658845 \ n'
更新
所以经过测试你有我的修改它的工作原理....除了它重复indef做的同时acct!=''
这里是我改变
chargeAccount = open('charge_accounts.txt', 'r')
accts = [line.strip() for line in chargeAccount]
while accts != '':
if chargeInput in accts:
#...
我将完全抛弃while循环,它无论是在列表或它不是。无需在每条线上循环。
最后关闭了'chargeFile',但从未打开; 'chargeAccount'已打开但从未关闭。这真的是你遇到问题的代码吗? :)试图调试重新输入问题并不是很有趣。复制粘贴是国王。 :) – sarnold 2011-05-23 01:56:33
哦,抱歉大脑现在有点糊涂,一直在用这个代码圈起来,它有点砍,因为我尝试了替代解决方案而改变了。该chargefile.close实际上是chargeAccount.close在我的代码 – Robocop 2011-05-23 02:03:52