我正在创建一个从CSV文件中的数据中绘制的堆积条形图。数据如下所示:
ANC-088,333,148
ANC-089,153,86
ANC-090,138,75
还有更多行。
我开始使用条形图开始编写脚本,如下所示:
from pylab import *
name = []
totalwords = []
uniquewords = []
readFile = open('wordstats-legends.csv', 'r').read()
eachLine = readFile.split('\n')
for line in eachLine:
split = line.split(',')
name.append(split[0])
totalwords.append(split[1])
uniquewords.append(int(split[2]))
pos = arange(len(name)) + 0.5
bar(pos, totalwords, align = 'center', color='red')
xticks(pos, name)
当我决定看看情况如何时,我收到以下错误:
---> 13 totalwords.append(split[1])
IndexError: list index out of range
我没有看到什么,我的第一步是什么? (其他解释最受欢迎,因为我继续尝试自学这些东西。)
答案 0 :(得分:1)
显然这是您eachLine = [item for item in readFile.split('\n') if len(item.split(',')) >= 3]
的问题,您的一行或多行不包含所需的数据。您可以尝试消除这些行:
from pylab import *
name = []
totalwords = []
uniquewords = []
readFile = open('wordstats-legends.csv', 'r').read()
eachLine = [item for item in readFile.split('\n') if len(item.split(',')) >= 3]
for line in eachLine:
split = line.split(',')
name.append(split[0])
totalwords.append(split[1])
uniquewords.append(int(split[2]))
pos = arange(len(name)) + 0.5
bar(pos, totalwords, align = 'center', color='red')
xticks(pos, name)
像这样:
function false() { echo "$$"; return ${1:-1}; }
false 42
答案 1 :(得分:1)
如果你确定整个文件看起来像你描述的那样,问题将是最后一个换行符(在文件的末尾),其中一个空字符串被插入到eachLine
中(你在换行符并且在最后一个换行符之后没有任何内容)。因此,您只需要在分割后省略eachline
中的最后一个元素,例如eachLine.pop()
。
如果您想要一个强大且通用的解决方案来处理您无法分成三个部分的每一行,您应该使用来自user1823的解决方案。但是,如果问题确实只是我上面描述的问题,那么通过拆分检查条件可能会减慢您对较大文件的影响。