【问题标题】:fasta file reading pythonfasta文件读取python
【发布时间】:2015-01-08 20:18:17
【问题描述】:

我正在读取格式如下的 FASTA 文件:

>gi|31563518|ref|NP_852610.1|微管相关蛋白 1A/1B 轻链 3A 异构体 b [智人] 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()

【问题讨论】:

  • 看看biopython。支持fasta文件的读写。

标签: python bioinformatics fasta


【解决方案1】:

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

BioPython 中介绍了读取和写入 FASTA 文件(如 cmets 中所建议的那样)。

我注意到您还没有计算 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 one-liner”,但请先尝试了解我的方法。它避免了您的代码陷入的陷阱:嵌套循环、不必要的分支、运行时列表增长、意大利面条代码等等。享受!

【讨论】:

    猜你喜欢
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多