我在Python中遇到了这个令人费解的问题,我正在运行这个脚本来迭代文件并从索引位置6中取出具有最高值的行。出于某种原因,当我运行它时,它只会迭代只有大约一半的文件。
这是代码:
output=open("max.txt","w")
from glob import glob
for filename in glob("*bam.txt"):
file=open(filename,"r")
lines = file.readlines()
max=0
for i in range(0,len(lines)+1):
if i<len(lines):
newlines=lines[i].replace("\n","\t")
splitted=newlines.split("\t")
if int(splitted[6])>int(max):
max=splitted[6]
index=i
elif i==len(lines):
output.write(filename+"\t"+lines[index])
else:
print("There is an error!")
output.close()
这是我最后收到的错误消息:
Traceback (most recent call last):
File "<stdin>", line 15, in <module>
IndexError: list index out of range
我特意将len(lines)+1
作为我的范围的结尾,因为我知道它会被排除,如果我只有len(lines)
,那么i
永远不会等于len(lines)
因此没有任何东西可写入输出。
非常感谢!
答案 0 :(得分:1)
我认为您的代码失败的原因是因为您没有在每个文件上重置index
。因此,如果文件1在第10行有最大值,但文件2只有7行,则可能会遇到索引超出范围的错误。在第二个文件i
上可能会引用len(lines)
,即7,但index
为9。
说实话,你在循环中的整个条件是多余的。您可能想要的是:
(...)
line_with_max=0
max=0
for i in range(0, len(lines)):
newlines=lines[i].replace("\n","\t")
splitted=newlines.split("\t")
if int(splitted[6]) > max:
max=int(splitted[6])
line_with_max=i
output.write(filename+"\t"+lines[line_with_max])
(...)