试图编写此功能,它将在屏幕上打印每个序列的ID

问题描述 投票:0回答:2

我正在尝试仅在输入文件中打印序列ID,而不是整个描述行),以及来自fastfa文件的GC内容,例如:

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()**
python fasta
2个回答
0
投票

这将打印某些内容,而不是所需的输出。您的代码中有几个错误:

缩进是错误的。

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()

0
投票

我在这里看到的第一件事是范围问题。您在小范围内调用line,但仅在calcGC函数范围的循环中才能访问line。在python中,作用域由标识定义。

现在我在这里看到的第二件事,我不知道是使用.startswith()方法。它将返回一个Bollean,而不是seqID ...但这是另一个问题。

对于这个答案,我只建议您首先修复该标识。尝试此代码:

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()
© www.soinside.com 2019 - 2024. All rights reserved.