пытаясь написать эту функцию, которая будет печатать на экране идентификатор каждой последовательности - PullRequest
1 голос
/ 21 апреля 2020

Я пытаюсь напечатать только идентификатор последовательности, а не всю строку описания) во входном файле вместе с содержимым G C рядом с ним из файла fastfa, например:

Seq1   40%
Seq2   37%
Seq3   12%

Когда я запускаю этот код, ничего не происходит.

    def main():
            calcGC()
    def calcGC():
         fileReader = open("Sequences.fasta",'r')
         for line in fileReader:
            seqID =line.startswith (">")
        seq=line[0:]

        gc_count = float((seq.count("G") + seq.count("C"))) / 
len(seq)*100
        print(seqID+"   "+ gc_count)

    fileReader.close
main()**

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Первое, что я вижу здесь, это проблема объема. Вы вызываете линию в общем объеме, но линия доступна только в oop области действия calcG C. В python область видимости определяется идентификатором.

Теперь второе, что я вижу здесь и не понимаю, - это использование .startswith() метода. Он будет возвращать Боллеан, а не seqID ... может быть, добавить здесь оператор if?

Еще одна последняя вещь: вы должны использовать оператор with для открытия файла, он закроет файл для вас и дать вам генератор.

Для этого ответа я просто предлагаю вам сначала исправить исправление. Попробуйте этот код:

def main():
    calcGC()

def calcGC():
    with open("Sequences.fasta", 'r') as fp :
        # using the enumerate here will give you both the index and the line itself. I assume here that the seqID you wanted to use is the Line index....
        for seqID, line in enumerate(fp):
            if line.startswith(">"):
                seq = line[0:]

                gc_count = float((seq.count("G") + seq.count("C"))) / len(seq) * 100
                print(seqID + "   " + gc_count)


main()
0 голосов
/ 21 апреля 2020

Это напечатает что-то, а не вывод, который вы хотите. В вашем коде есть несколько ошибок:

Неверный отступ.

SeqID - логическое значение, которое проверяет, только начинается ли строка с символа <. Так что я думаю, вы хотите, чтобы это проверило, печатать ли вам строку или нет. В любом случае, если вы хотите напечатать номер строки, если он начинается с <, это будет примерно так:

def calcGC():
    fileReader = open("Sequences.fasta", 'r')
    for seqID, line in enumerate(fileReader):
        if line.startswith(">"):
            seq = line[0:]

            gc_count = float((seq.count("G") + seq.count("C"))) / len(seq) * 100
            print(seqID, "   ", gc_count)

    fileReader.close()

if __name__ == "__main__":
    calcGC()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...