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没有换行符,这意味着即使他比较每个值,它们也不会