2011-12-08 48 views
0

前段时间我开始研究一个简单的程序,我已经回到了它。我在这里要做的是使用索引来操纵CSV数据打印的顺序。当我运行这段代码时,我得到“IndexError:列表索引超出范围”。我做错了什么或失踪?提前致谢。尝试从CSV索引数据

import csv 

mags = csv.reader(open("mags.csv","rU")) 

for row in mags: 

    print [titles.upper() for titles in row] 

    print [row[index] for index in (1, 0)] 
+0

您粘贴的代码包含错误,变量'mags'未定义。更换成员后,我发现没有错误。什么是CSV文件的内容? – hzm

+0

奇怪。你是否说如果你替换'mags'变量,你不再会得到indexerror? CSV包含杂志的标题和日期。 – mantissa45

+0

是的,我没有看到'IndexError'与我自己的CSV文件,所以我想知道CSV文件中的一些行导致这个问题。你能否从CSV文件中粘贴一些行?或者您可以在打印列表之前打印出“行”,这可以帮助找到问题。 – hzm

回答

1

你的错误看起来是对代码的最后一行。它看起来像你的循环遇到一个有0个字段的空行,所以row [index]引发IndexError。或者该行只有1个字段,所以当索引为1时,row [index]会引发错误。这将修复它:

if len(row) >= 2: 
    print [row[index] for index in (1, 0)] 
+0

而不是第二个循环感谢Phil! – mantissa45

+0

如何将低级函数合并到此代码中? – mantissa45

+0

你是什么意思? – Phil

1

根据csv.reader()中的文档,从csv文件读取的每一行都以字符串列表形式返回。我想你的文件中有空字段或行。

所以,你应该这样做:

​​3210

但你也可以使用:

members = csv.reader(open("mags.csv","rU")) 
for row in members: 
    row.reverse() 
    for element in row: 
    print element 
+0

感谢ILYA。这绝对颠倒了我想要的数据顺序。现在我需要弄清楚如何在同一行上打印。 – mantissa45

+0

您可以使用'print','。join(row)' –

相关问题