2014-11-12 5 views
0

Я читаю файл 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() 
+5

Взгляните на [biopython] (http://biopython.org/wiki/Main_Page). Он поддерживает чтение и запись файлов fasta. – mhawke

ответ

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 one-liner», но сначала попробуйте понять мой подход. Это позволяет избежать ошибок, с которыми столкнулся ваш код: вложенные циклы, ненужное разветвление, увеличение времени выполнения, код спагетти, чтобы назвать несколько. Наслаждайтесь!

Смежные вопросы