【问题标题】:'Split' - text file to list - IndexError (Using Python)'Split' - 要列出的文本文件 - IndexError(使用 Python)
【发布时间】:2018-01-30 21:31:37
【问题描述】:

这是我的代码:

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

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

【问题讨论】:

  • 您有一行没有| 字符(可能是空行)。
  • @CristiFati 但是john14|john|doe|14|11 究竟是文件的样子?我有点困惑...
  • 那行末尾不是有EOLN\n,0X0A)吗?
  • @CristiFati 这是什么意思??
  • 请阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您描述的问题。

标签: python python-2.7 list split text-files


【解决方案1】:

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

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

注意你有一个严重的逻辑错误:

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

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

【讨论】:

  • 但是我已经在程序的其他部分使用了相同的方法,因为我看到其他堆栈溢出用户建议使用它。使用的方法是一样的吗?
  • 我认为不是——请提供参考。您在此处发布的代码表明您已对此类答案的原始意图进行了一些更改。
  • 我很困惑。它应该是什么样子?
  • 我们不知道:你没有描述你要解决的问题;您没有提供请求的 MCVE(包括 actual 输入文件),或对您提到的早期答案的引用。我们是一个很好的社区,但我们不会读懂你的想法然后做你的功课——这有点超出了我们的能力。 :-)
【解决方案2】:

我没有完全了解您想要做什么,但要小心 userDetailsFile 上的内部循环。您正在使用相同的文件描述符来保持迭代。

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

【讨论】:

    【解决方案3】:

    我不确定您的问题详情,但我认为您希望拥有以下内容:

    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
    

    让我知道它是否有效。

    【讨论】:

      【解决方案4】:

      我想通了。 对于那些有同样问题的人,这是我做错的:

      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')

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多