У меня есть файл GFF. При открытии файла, строка за строкой, я хочу получить определенную информацию. Важно отметить, что количество хромосом и соответствующий диапазон. Первая часть кода работает нормально. В чем проблема, так это то, что соответствующая секция FASTA не работает. Хотя я получу Истину за то, что я нахожусь в правильном месте в файле, мой вывод - самая последняя строка нуклеотидов, и мое значение m - Нет. Я знаю, что это не мое регулярное выражение. Я полагаю, что есть проблема или в области действия или в чем-то другом, достаточно очевидном (что мне трудно увидеть).
Я погуглил и переполнился стеком, и пока не нашел исправления. Любое подталкивание будет оценено.
def main():
parser = argparse.ArgumentParser( description='Put a description of your script here')
parser.add_argument('-source_gff', '--input_file', type=str, required=True, help='Path to an input file to be read' )
parser.add_argument('-type', '--type', type=str, required=True, help='type to look for' )
parser.add_argument('-attribute', '--attribute', type=str, required=True, help='column 9' )
parser.add_argument('-value', '--value', type=str, required=True, help='column 9' )
args = parser.parse_args()
withinFASTASection = False
key = ''
wholething = list()
#iterate through file
for line in open(args.input_file):
line = line.rstrip()
if line.startswith('##FASTA'):
withinFASTASection = True
#tab delimiter
cols = line.split("\t")
#will skip below code if not 9 columns
if len(cols) != 9:
continue
#find line that meets args requirements
if (cols[2] == args.type
and args.attribute in cols[8]
and args.value in cols[8]):
gene = args.type
geneID = args.attribute
geneValue = args.value
#count to beginning and end of region
start = int(cols[3])
end = int(cols[4])
print(">{}:{}:{}").format(gene, geneID, geneValue)
key = cols[0]
print(withinFASTASection) #False here
#get to the FASTA section
#find line with >key
print(withinFASTASection) #True here
reg = (r'{0}'.format(key))
#correct key & reg
print (key)
print (reg)
if (withinFASTASection):
m = re.search(reg, line)
# m is None
print (m)
if m == key:
#STILL LAST SEQ OF FILE
print (line)
# start adding nts to list line by line until whitespace
# wholething.append(line)
if __name__ == '__main__':
main()
Текущий вывод из линий печати и т. Д .:
gene:ID:YAR003 Correct output
True Correct WithinFASTASection
chrI Correct key
>chrI Correct Reg
None Incorrect m value
Пример строки, которую я ищу в файле:
##FASTA WithinFASTASection = True once this line is read
>chrI Should trigger code if m == key, but m is None
***** EDIT
Я считаю, что отступы верны. Если я сделаю отступ для печати (в пределах FASTASection), он вернет только ложь. Я попробую поиграть с различными отступами еще.
****** Потенциальная подсказка Править
Когда я успешно получаю строку, это самая последняя строка, которую я получаю в качестве вывода. У меня есть эта проблема в другой программе. Кажется, я не могу понять первые или несколько строк файла.