【问题标题】:Select specific item from list从列表中选择特定项目
【发布时间】:2013-07-15 15:31:44
【问题描述】:

我正在针对 csv 文件运行一些函数。我调用特定列并拆分文本:

 with open('lasty.csv','rb') as f:
     reader = csv.reader(f, delimiter=',')
     for column in reader:
          entry = column[7].split(" ")[4]  

第 7 列的示例如下所示:

    ['Withdrawal', 'Debit', '', '', "MITTCHELL'S", 'FISH', 'M', '', '', '', '', 'location', 'location', '', 'location']

我收到以下错误:

    entry = column[7].split(" ")[4]
    IndexError: list index out of range

但是,如果我运行:

  entry = column[7].split(" ")[0]

它可以正常工作,但在 [0] 之后它给了我同样的错误。

先谢谢你了。

编辑:

拆分前的第 7 列如下所示:

    "Withdrawal Debit   MITTCHELL'S FISH M     WINTER PARK  FLUS"

在这种情况下,我希望抓取“MITTCHELL'S”,当列被拆分时,它位于 [4] 或第 5 位。

【问题讨论】:

  • 问题是第八列没有8个空格分隔的项目。可能是"a b c d",这可以解释为什么你会收到IndexError

标签: python list csv indexing outofrangeexception


【解决方案1】:

row 是您输入 CSV 中的一个单独行,并且已经拆分为列。

在这种情况下,您试图拆分一个空字符串:

>>> ''.split(' ')
['']

只需改用entry = row[4]

 for row in reader:
      entry = row[4]  

【讨论】:

  • @JohnK:您需要仔细检查您的行是否为空。您可以使用str.split() without 参数来拆分可变宽度的空格并避免所有那些空字符串。
  • 这确实有助于删除多余的空格,但我仍然收到索引错误。我现在需要调用 [2] 或第三项。任何想法
  • 正如我所说,您的row[7] 是,对于row 的某些值,不是您认为的那样。您的 CSV 文件中有不止一行,可能有一行符合您的期望,但至少有另一行您的列没有足够的空格来创建这么多值。
  • @JohnK:如果您要拆分的字符串中没有足够的空格分隔单词,则会发生您的错误。这可能是一个空字符串,也可能是一个只有一两个单词的字符串。我知道每一行都有一个第 7 列,它是一个要在空格上拆分的字符串,然后获取第三个元素。
  • 我现在明白你说的是没有项目 [2] 的行......你是对的!感谢您的耐心等待。
猜你喜欢
  • 2019-05-16
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 2016-03-27
  • 2021-12-01
  • 2015-11-03
  • 1970-01-01
  • 2016-08-05
相关资源
最近更新 更多