【发布时间】:2020-10-28 00:28:53
【问题描述】:
我在尝试对从 CSV 提取创建的表迭代 for 循环时遇到 'List Index out of range' 错误,但无法弄清楚原因 - 即使在之后尝试许多不同的方法。
这是错误发生方式的分步说明:
- 我正在删除导入的 CSV 文件的第一行,因为 行包含列的名称但没有数据。 CSV 具有以下结构。
columnName1, columnName2, columnName3, columnName4
This, is, some, data
I, have, in, this
very, interesting, CSV, file
- 在将 CSV 存储在名为 oldArray 的第一个数组中后,我想填充一个 newArray,它将从 oldArray 中获取所有值,但 不是 第一行,即列名行,如前所述 提及。我的 newArray 应该看起来像这样。
This, is, some, data
I, have, in, this
very, interesting, CSV, file
- 要创建这个 newArray,我将以下代码与 append() 函数结合使用。
tempList = []
newArray = []
for i in range(len(oldArray)):
if i > 0: #my ugly way of skipping line 0...
for j in range(len(oldArray[0])):
tempList.append(oldArray[i][j])
newArray.append(tempList)
tempList = []
- 我还将这些列存储在自己的单独列表中。
i = 0
for i in range(len(oldArray[0])):
my_columnList[i] = oldArray[0][i]
- 接下来会出现错误:我现在想使用 for 循环和插入(在函数中)从此 newArray 填充树视图表。但我总是得到“索引列表超出范围错误”,我不知道为什么。
def populateTable(my_tree, newArray, my_columnList):
i = 0
for i in range(len(newArray)):
my_tree.insert('','end', text=newArray[i][0], values = (newArray[i][1:len(newArray[0]))
#(im using the text option to bypass treeview's column 0 problem)
return my_tree
错误消息 --> “文件”(...我的工作目录...)”,第 301 行,在 populateTable my_tree.insert(parent='', index='end', text=data[i][0], values=(data[i][1:len(data[0])])) IndexError:列表索引超出范围“
对不同的数据集和列使用相同的函数效果很好,但这里 newArray 不适用。
我确信错误完全来自这个“newArray”,并且没有链接到另一个参数。
我已经测试了列列表的有效性,通过一些 print() 函数在 oldArray 中导入 CSV,一切看起来都很正常 - 值、行维度、列维度。
这对我来说是一个很大的谜...... 非常感谢大家的帮助和时间。
【问题讨论】:
-
与您使用的代码完全相同吗?在数字 4 中,值
values = (newArray[i][1:len(newArray[0]))似乎是错误的。最好写完整的错误信息。 -
嗨,这确实是我正在使用的相同代码 - 至于值 = (newArray[i][1 : len(newArray[0]),我可以确认这是有效的:我'已经在其他表上尝试过,它没有问题。只是这里的这个'newArray'会引起麻烦。整个错误消息是:“文件”(......我的工作目录......)“,第301行,在 populateTable my_tree.insert(parent='', index='end', text=data[i][0], values=(data[i][1:len(data[0])])) IndexError: list索引超出范围“