gpt4 book ai didi

python - 定义 xrange 后的 StopIteration

转载 作者:太空宇宙 更新时间:2023-11-04 10:17:32 25 4
gpt4 key购买 nike

我编写了以下代码来在文本文件中定义 4 行的 block ,如果 block 的第 2 行仅由一种字符组成,则输出该 block 。假设(并且之前已验证)第 2 行始终由 36 个字符的字符串组成。

# filter out homogeneous reads

import sys
import collections
from collections import Counter

filename1 = sys.argv[1] # file to process

with open(filename1,'r') as input_file:
for line1 in input_file:
line2, line3, line4 = [next(input_file) for line in xrange(3)]
c = Counter(line2).values() # count characters in line2
c.sort(reverse=True) # sort values in descending order
if c[0] < 36:
print line1 + line2 + line3 + line4.rstrip()

但是,我收到如下 StopIteration 错误。如果有人能告诉我原因,我将不胜感激。

$ python code.py test.file > testout.file
Traceback (most recent call last):
File "code.py", line 11, in <module>
line2, line3, line4 = [next(input_file) for line in xrange(3)]
StopIteration

我们将不胜感激任何帮助,尤其是那些解释我的特定代码有什么问题以及如何修复它的帮助。这是一个输入示例:

@1:1:1323:1032:Y
AGCAGCATTGTACAGGGCTATCATGGAATTCTCGGG
+1:1:1323:1032:Y
HHHBHHBHBHGBGGGH8HHHGGGGFHBHHHHBHHHH
@1:1:1610:1033:Y
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+1:1:1610:1033:Y
HHEHHHHHHHHHHHBGGD>GGD@G8GGGGDHBHH4C
@1:1:1679:1032:Y
CGGTGGATCACTCGGCTCGTGCGTCGATGAAGAACG

最佳答案

您的示例输入已经显示了问题:那里有 10 行,不能被 4 整除。所以当您阅读最后一个 block 时,您会得到 line1line2 但对于 line3next() 调用,输入已用完,您什么也得不到。

您的完整输入文件中可能也有同样的问题:行数根本不能被 4 整除。

有几种方法可以克服这个问题。最好的办法可能是修复你的输入,因为你似乎一直期待四行,如果这不是输入文件提供的内容,那么似乎存在内容问题。

另一个非常简单的修复方法是使用 next() 指定一个默认值:

line2, line3, line4 = [next(input_file, '') for line in xrange(3)]

现在,当 next() 失败时,将返回默认值 ''。因此,即使文件已用完,您仍然可以获得一些内容。

然而,一个可能更好的解决方案是修复您迭代文件的方式。您有两个位置可以访问同一个文件迭代器,一次在外部 for 循环中,三次在列表理解中。它可能看起来很简单,因此您不会遇到其他问题,但是您真的应该尝试更改它,以便您只有一个位置可以遍历迭代器;或者只使用 next() 调用,但将它与 for 循环混合似乎不是个好主意。

例如,您可以使用 grouper itertools recipe以四人为一组干净地迭代文件:

with open(filename1, 'r') as input_file:
for line1, line2, line3, line4 in grouper(input_file, 4, fillvalue=''):
# do things with the lines

关于python - 定义 xrange 后的 StopIteration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34434135/

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