Python, GFF-файл, раздел FASTA, в обход регулярного выражения - PullRequest
0 голосов
/ 07 мая 2019

У меня есть файл 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), он вернет только ложь. Я попробую поиграть с различными отступами еще.

****** Потенциальная подсказка Править Когда я успешно получаю строку, это самая последняя строка, которую я получаю в качестве вывода. У меня есть эта проблема в другой программе. Кажется, я не могу понять первые или несколько строк файла.

...