【问题标题】:IndexError while printing in from csv从 csv 打印时出现 IndexError
【发布时间】:2013-11-09 22:18:28
【问题描述】:

从包含两列和 36 行长的 CSV 文件读取时,我到达第 25 行并抛出错误。我已经在两个不同的编辑器中签入了文件,并且那里没有换行符或任何东西。我很困惑,因为逻辑在我看来是合理的。

Linked here 是 CSV 文件。

我的回溯(包括最后几行打印)如下:

('Line', 23, 'http://arstechnica.com/gadgets/2013/11/samsungs-growth-isnt-in-your-hand-its-in-your-laundry-room/')
('Line', 24, 'http://arstechnica.com/security/2013/11/now-theres-a-bug-bounty-program-for-the-whole-internet/')
Traceback (most recent call last):
  File "getArticleInformation.py", line 69, in <module>
    printCSV()
  File "getArticleInformation.py", line 63, in printCSV
    print ("Line", i, row[1])
IndexError: list index out of range

打印方法的工作方法如下:

def printCSV():
    f = csv.reader(open("ArticleLocationCache.csv", "rb"))
    i = 1
    print (i)
    for row in f:
        print ("Line", i, row[1])
        i = i + 1

在识别我的错误方面的任何帮助都将是惊人的。在过去的一个小时里,我一直在努力解决它。

【问题讨论】:

  • 用您粘贴的数据进行的测试对我有用。
  • 与我无法重现的索引错误无关,您的代码中还有其他一些可以改进的地方。首先,使用with 语句来处理您正在打开的文件。接下来,使用enumerate 生成i 值作为循环的一部分,而不是手动处理它。最后,确保您打算打印一个元组(如果您希望 print 在 Python 2 中作为函数工作,请尝试将 from __future__ import print_function 放在文件顶部)。
  • 谢谢您的建议,先生!

标签: python csv


【解决方案1】:

简单地说,您正在读取的行中没有至少 2 个元素。我不确定你想对没有的行做什么,我怀疑你只是想跳过它。以下是您如何做到这一点的示例:

def printCSV():
f = csv.reader(open("ArticleLocationCache.csv", "rb"))
i = 1
print (i)
for row in f:
    if len(row)>=2:
        print ("Line", i, row[1])
        i = i + 1

查看您的 CSV 文件,您可能无法正确解析它。作为弄清楚发生了什么的替代方法,尝试只打印整行,然后找出它为什么不能按你想要的那样工作,如下所示:

def printCSV():
f = csv.reader(open("ArticleLocationCache.csv", "rb"))
i = 1
print (i)
for row in f:
    print (row)
    print ("Line", i, row[1])
    i = i + 1

【讨论】:

  • 据我所知,早期分离此信息的过程很好地将标头的值从 href 分离到列和行中。文件中没有缺少逗号。
  • 我会尽快回复您。打算用这两个测试。你想看看我解析信息并保存到 csv 的方法吗?
  • 对于前两者,我一直收到正确的输入,直到第 24 个条目。对于这两者中的后者,我收到:('Row', ['P']) 在同一个堆栈跟踪之前打印的最后一件事
  • 我越想这个,我越觉得你的文件在你的本地高清上是不正确的。你 100% 确定它是完整的吗?
  • 我更改了写入和读取分隔符,问题消失了!非常感谢!
猜你喜欢
  • 2018-03-15
  • 1970-01-01
  • 2014-01-06
  • 2014-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
相关资源
最近更新 更多