我对python有些新手,我可以使用一些帮助来弄清楚我的错误带来了什么。
datafile = "filename.csv"
colors = ['Green','White','Yellow','Pink','Blue','Purple','Gray','Brown','Orange','Red','Black'] # put in order of the columns
colnames = []
for color in colors:
colnames.append(color+"1")
colnames.append(color+"2")
# Define data structure to hold responses for each column
responses = dict()
for colname in colnames:
responses[colname] = []
# Read in the responses
lines = open(datafile,"r").readlines()
for line in lines:
data = line.strip('\n').split(",")
for i,colname in enumerate(colnames):
if '1' in colname:
responses[colname].append(data[i])
else:
responses[colname].append(data[i].split(','))
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-21-4039ddb1f5f5> in <module>()
21 responses[colname].append(data[i])
22 else:
---> 23 responses[colname].append(data[i].split(','))
24
25 # Count the number of subjects
IndexError: list index out of range
我不确定IndexError: list index out of range
是否来自实际else:
或responses[colname].append(data[i].split(','))
是否有问题。
它也可以在列表for
的{{1}}循环中,我相当确定方面是正确的,但你永远不会知道
答案 0 :(得分:0)
for line in lines:
data = line.strip('\n').split(",")
我认为以上代码是您获得IndexError
的原因,因为data
的分配将覆盖之前的代码,而data
的内容始终是线即可。 (除非你只想要最后一行)。
e.g:
<强> filename.csv 强>
blue,red
red,green
yellow,red
data=['yellow', 'red']
这意味着您的for
循环等效于
data=lines[-1].strip('\n').split(",")
所以我想这就是你想要的:
data=[]
for line in lines:
data.append(line.strip('\n').split(","))
或使用此列表理解:
data=[line.strip('\n').split(",") for l in lines]
然后确保data
的长度大于colnames
。
顺便说一下,尝试调试代码或print
变量,你会发现原因。