【发布时间】:2016-03-29 19:08:16
【问题描述】:
我编写了以下代码来定义文本文件中的 4 行块,如果块的第 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
【问题讨论】:
-
for循环和列表解析都在遍历文件,也许您应该将其合理化为单个循环? -
你的 for 循环中已经有一个隐含的
next(input_file);你是否考虑过一个? -
你文件中的行数能被
4整除吗? -
该死...是的,我使用
head命令默认设置生成了该测试输入...但是,@poke 下面的答案非常有启发性,并指出了我的代码中的其他缺点,这很不错:)
标签: python python-2.x stopiteration