批处理文件只运行了一半?

时间:2018-02-13 05:28:44

标签: python

我在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)因此没有任何东西可写入输出。

非常感谢!

1 个答案:

答案 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])
(...)