此代码的第6行产生“IndexError:字符串索引超出范围”。我假设当我问“如果行[6]!=无”时,行中没有内容,但我无法弄清楚原因。我也尝试过使用!='',但问题出在此之前。
import csv
dict1={}
list1 = csv.reader(open('014850_D_AA_20070207.txt'), delimiter='\t')
list1.next() # skips the headers
for line in list1:
if line[6] != None:
dict1[line[0]]= (line[6] + ", " + line[11])
else:
continue
print dict1
答案 0 :(得分:2)
Python索引从零开始,因此line[6]
访问line
的第7个元素。在这种情况下,line
没有七个元素,因此失败。
if line[6] != None
不是检查某行是否没有内容的正确方法。请改用if len(line) < 7
。
csv.DictReader
是一个更好的界面,用于读取带有标题行的CSV文件。迭代它会将行作为字典,并将相应的标题项作为键,这使得代码更容易理解(与使用魔术索引相比)。
答案 1 :(得分:0)
尝试将第6行替换为:
if len(line) > 6:
但可能
if len(line) > 11:
更好,因为你使用下面的第[11]行。
当您将第[6]行测试为==时,您已经尝试访问第七行元素。如果行包含少于7个字符
,则会出现索引错误答案 2 :(得分:0)
避免将其置于'try'块中并使用string.find()例如
[ - 1]用于获取字符串中的最后一个字符
也像
else:
continue
不寻常
我差点忘了说:if string [5]!= None: 会引发一个indexerror,因为如果它没有,它将超出范围
答案 3 :(得分:0)
感谢所有有用的想法。我能够使用csv.DictReader解决我的问题,如下所示:
import csv
dictPI = {}
dictGS = {}
fh = open('014850_D_AA_20070207.txt')
for line in csv.DictReader(fh, delimiter='\t'):
ProbeID = line['ProbeID']
GeneSymbol = line['GeneSymbol']
Description = line['Description']
if GeneSymbol != '':
dictPI[ProbeID] = GeneSymbol, Description
dictGS.setdefault(GeneSymbol, []).append(ProbeID)