'拆分' - 要列出的文本文件 - IndexError(使用Python)

时间:2018-01-30 21:31:38

标签: 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('|')
                    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

知道为什么会这样吗?我不确定为什么我会收到此错误。

4 个答案:

答案 0 :(得分:1)

那时bestAchiever是什么?不是你认为它是什么,计算机认为它是什么?那应该是你的第一个调试步骤。

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

请注意,您遇到严重的逻辑错误:

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

你的第一个和第三个循环正在争夺对line的控制权。这会为你好好结束。

答案 1 :(得分:0)

我没有得到你想要做的事情,但要注意userDetailsFile上的内部循环。您正在使用相同的文件描述符来继续迭代。

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

答案 2 :(得分:0)

我不确定您的问题详情,但我认为您希望这样:

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

让我知道它是否有效。

答案 3 :(得分:0)

我已经弄明白了。 对于那些遇到同样问题的人来说,这就是我做错了:

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

我必须添加line.rstrip('\n')