def give(filename):
with open(filename) as f:
for line in f:
if 'Contig' in line:
category = line.strip('* \r\n')
break
cnt = 0
aim = []
for line in f:
if 'Contig' in line:
yield (category+'='+str(cnt),aim)
category = line.strip('* \r\n')
cnt = 0
aim= []
elif line.strip():
cnt+=1
if 'is in' in line:
aim.append(line.strip())
yield (category+'='+str(cnt),aim)
for a,b in give('input.txt'):
print a
if b: print b
результат
Contig 1=2
Contig 2=3
['E_264+ is in E_254+']
Contig 3=2
Функция give()
не является нормальной функцией, это функция генератора. См. Документ, и если у вас есть вопрос, я отвечу.
strip()
- это функция, которая удаляет символы в начале и в конце строки
При использовании без аргументов strip()
удаляет пробелы (то есть \f
\n
\r
\t
\v
и blank space
). Если в качестве аргумента есть строка, все символы, присутствующие в аргументе строки, найденные в обработанной строке, удаляются из обработанной строки. Порядок символов в строковом аргументе не имеет значения: такой аргумент обозначает не строку, а набор символов, которые необходимо удалить.
line.strip()
- это способ узнать, есть ли символы в строке, не являющиеся пробелами
Важно то, что elif line.strip():
находится после строки if 'Contig' in line:
и что оно написано elif , а не , если , важно: если это было наоборот, line.strip()
будет True для строки для примера
******** Contig 2 *********\n
Полагаю, вам будет интересно узнать содержание таких строк:
E_264+ is in E_254+
потому что именно такая линия меняет счет
Поэтому я отредактировал свой код так, чтобы функция give()
вырабатывала также информацию такого рода строк