gpt4 book ai didi

python - 批处理文件只运行一半以上?

转载 作者:太空宇宙 更新时间:2023-11-03 14:07:37 24 4
gpt4 key购买 nike

我在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),因此不会将任何内容写入输出。

非常感谢!

最佳答案

我认为您的代码失败的原因是您没有重置每个文件的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])
(...)

关于python - 批处理文件只运行一半以上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48760015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com