';拆分';-要列出的文本文件-索引器(使用Python)

';拆分';-要列出的文本文件-索引器(使用Python),python,python-2.7,list,split,text-files,Python,Python 2.7,List,Split,Text Files,这是我的代码: with open("userDetails.txt", "r") as userDetailsFile: for line in userDetailsFile: if bestUsername in line: for line in userDetailsFile: bestAchiever = line.split('|')

这是我的代码:

with open("userDetails.txt", "r") as userDetailsFile:
        for line in userDetailsFile:
            if bestUsername in line:
                for line in userDetailsFile:
                    bestAchiever = line.split('|')
                    user = bestAchiever[0]
                    firstName = bestAchiever[1]
                    surname = bestAchiever[2]
                    age = bestAchiever[3]
                    yearGroup = bestAchiever[4] 
这就是
userDetailsFile
的外观:

john14|john|doe|14|11
我得到了一个错误:

firstName = bestAchiever[1]
IndexError: list index out of range

知道为什么吗?我不知道为什么会出现这个错误

在这一点上,什么是
最佳成就者
?不是你所想的,而是电脑所想的?这应该是调试的第一步

运行时错误表明变量的长度小于2

请注意,您有一个严重的逻辑错误:

    for line in userDetailsFile:
        if bestUsername in line:
            for line in userDetailsFile:

您的第一个和第三个循环正在争夺
行的控制权。这对你来说不会有好的结局。

我不知道你到底想做什么,但是要小心UserDetails文件的内部循环。您正在使用相同的文件描述符来保持迭代


如果您的文件不大,您可能需要执行一个
userDetailsFile.readlines()
,将整个内容放入一个列表中,并执行此列表上的循环。

我不确定您的问题详细信息,但我认为您希望执行以下操作:

best_user = 'john14'
with open('userdetailsfile', 'r') as f:
    for line in f:
        if best_user in line:
            words = line.split('|')
            f_name, s_name, age, yeargroup = words
让我知道它是否有效

我已经弄明白了。 对于那些有同样问题的人,我做错了:

lineWithoutNewLine = line.rstrip('\n')
bestAchiever = lineWithoutNewLine.split('|') 
user = bestAchiever[0]
firstName = bestAchiever[1]
surname = bestAchiever[2]
age = bestAchiever[3]
yearGroup = bestAchiever[4]

我必须添加
行。rstrip('\n')

您有一行没有
字符(可能是空行)。@CristiFati但是
john14 | john | doe | 14 | 11
文件到底是什么样子?我有点困惑…那行末尾不是有一个EOLN(
\n
,0X0A)吗?@CristiFati这到底是什么意思?请阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。但我在程序的其他部分使用了与其他堆栈溢出用户建议的相同的方法。这和使用的方法是一样的?我想不是--请提供参考资料。你在这里发布的代码表明你对这个答案的初衷做了一些修改。我很困惑。我们不知道:你没有描述你正在解决的问题;您尚未提供所需的MCVE(包括实际输入文件)或您提到的对早期答案的引用。我们是一个很好的社区,但我们不会先了解你的想法,然后再做家庭作业——这有点超出我们的能力范围。:-)