Я написал следующий код для определения блоков из 4 строк в текстовом файле и вывода блока, если вторая строка блока состоит только из одного типа символов. Предполагается (и ранее подтверждено), что вторая строка всегда состоит из строки из 36 символов.StopIteration после определения xrange
# 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>[email protected]
@1:1:1679:1032:Y
CGGTGGATCACTCGGCTCGTGCGTCGATGAAGAACG
И 'for' петли и список понимания является перебором над файлом, возможно, вам следует рационализировать, что вплоть до одного цикла? – jonrsharpe
У вас уже есть неявный 'next (input_file)' в вашем цикле for; вы считаете, что вы за один? –
Число строк в вашем файле делится на '4'? –