2010-09-21 3 views
1

Мое задание попросить сделать вызов функции readFasta, который принимает один аргумент: имя файла fasta format (fn), содержащего одну или несколько последовательностей. Функция должна читать файл и возвращать словарь, где ключи являются заголовками fasta, а значения представляют собой соответствующие последовательности из файла fn, преобразованного в строки. Убедитесь, что вы не включаете никаких новых строк или других символов пробела в последовательности в словаре.Программирование на Python

Для экс, если afile.fa выглядит так:

>one 
atctac 
>two 
gggaccttgg 
>three 
gacattac 

то a.readFasta (е) возвращает:

[‘one’ : ‘atctac’, 
‘two’ : ‘gggaccttgg’, 
‘three’: ‘gacattac’] 

Если попытался написать некоторые коды, но, как я полностью новичок в программировании, это не очень помогло мне. Могут ли все помочь мне. Огромное спасибо. Вот мои коды:

import gzip 

def readFasta(fn): 
    if fn.endswith('.gz'): 
     fh = gzip.gzipfile(fn) 
    else: 
     fh = open(fn,'r') 

    d = {} 

    while 1: 
     line = fh.readline() 

     if not line: 
      fh.close() 
      break 

     vals = line.rstrip().split('\t') 
     number = vals[0] 
     sequence = vals[1] 

     if d.has_key(number): 
      lst = d[number] 

      if gene not in lst: 
       # this test may not be necessary 
       lst.append(sequence) 
     else: 
      d[number] = [sequence] 

    return d 

Вот что я получил в моем AFile.txt

one atctac

two gggaccttgg

three gacattac

+1

Вы бы, наверное, гораздо лучше удачи в http://biostar.stackexchange.com Это лучше редукторный для типа биоинформатики вопросы – GWW

+0

Вы должны переформатировать свой код. выделите свой код и нажмите значок с цифрами. –

+0

Я пытаюсь отредактировать форматирование, и оно отображается правильно в предварительном просмотре, но мои изменения влияют только на строку 'import gzip'. я моюсь руками, рискуя об их вики-сообществе. – aaronasterling

ответ

1

ваш пост немного сбивает с толку. Я предполагаю, что вы хотите, чтобы он вернул диктофон. в этом случае вы должны написать его как {'one': 'actg', 'two': 'aaccttgg' }. если вы правильно представили формат файла, то эта функция должна сделать трюк.

import gzip 

def read_fasta(filename): 
    with gzip.open(filename) as f: 
     return dict(line.split() for line in f) 
+0

я просто использовал код, но все еще есть ошибка с Python 2.6 версии: – pmt0512

+0

>>> импорт readFasta а б >>> b.readFasta («») AFile.txt Traceback (самый последний вызов последним): Файл " », строка 1, в Файл« readFasta.py », строка 37, в readFasta IndexError: индекс списка за пределами допустимого диапазона – pmt0512

+0

@ pmt0512. если вы поместите его в файл сам по себе, это поможет. Я не знаю, в какой строке код, который я дал вам, начинается в этом файле. Он должен быть в файле длиной девять строк для справки. Но, несмотря на это, в моем коде (AKAIK) нет места, что может привести к ошибке индекса. – aaronasterling

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