fasta文件阅读python

时间:2014-11-12 04:18:12

标签: python bioinformatics fasta

我正在阅读一个FASTA文件,其格式如下:

>gi|31563518|ref|NP_852610.1| microtubule-associated proteins 1A/1B light chain 3A isoform b [Homo sapiens]
MKMRFFSSPCGKAAVDPADRCKEVQQIRDQHPSKIPVIIERYKGEKQLPVLDKTKFLVPDHVNMSELVKIIRRRLQLNPTQAFFLLVNQHSMVSVSTPIADIYEQEKDEDGFLYMVYASQETFGF 

我必须读取文件,然后计算JC距离(对于一对序列,JC距离是-3/4 * ln(1 - 4/3 * p),其中p是站点的比例两者之间有所不同)

我已经建立了它的骨架,但我不确定如何做其余的事情。在读取和计算JukesCantor距离之后,我必须将其写入新的输出文件,它应该在一个表格中 我能得到的任何帮助非常感谢!谢谢,python和fasta文件的新手

def readData():
    filename = input("Enter the name of the FASTA file: ")
    infile = open(filename, "r")

def CalculateJC(x,y):
    if x == y:
        return 0
    else:
        return 1 # temporary*

def calcDists(seqs):
    output = []
    for seq1 in seqs:
        newrow = []
        for seq2 in seqs:
            dist = calculateJS(seq1,seq2)
            newrow.append(dist)
        output.append(newrow)
        list(enumerate(seasons))
    return output


def outputDists(distMat):
    pass

def main():
    seqs = readData()
    distMat = calcDists(seqs)
    outputDists(distMat)



if__name__ == "__main__":
    main()

1 个答案:

答案 0 :(得分:1)

你一次问的问题太多了!专注于一个。

阅读和编写FASTA文件的内容在BioPython中(正如评论中所述)。

我注意到你还没有计算你的JC距离,所以也许这就是你需要帮助的地方。 以下是我提出的建议:

import itertools, math

def computeJC(seq1, seq2):
    equal = 0
    for base1, base2 in itertools.izip(seq1, seq2):
        equal += (base1 == base2)
    p = equal / float(len(seq1))     
    return -3/4 * math.log(1 - 4/3 * p)  

这里解释了itertools.izip技巧:How can I iterate through two lists in parallel 这段代码适用于任何类型的字符串,当seq1或seq2到达结尾时,外观将停止。

其他人可能会想出一个" Pythonic单线",但首先要尝试理解我的方法。它避免了代码感觉到的陷阱:嵌套循环,不必要的分支,运行时列表增长,意大利面条代码等等。请享用!