2009-10-15 8 views
0

У меня есть файл, который содержит две последовательности. У меня есть программа, которая может читать все последовательности, объединять их и отображать длину обеих последовательностей. Теперь я хочу отображать длину по отдельности. Две последовательности разделяются символом >.Отображение длины отдельных последовательностей в файле

Пример:

SEQ1 >ATGGGACTAGCAGT 

SEQ2 >AGGATGATGAGTGA 

Программа:

#!usr/bin/python 
import re 
fh=open('clostp1.fa','r') 
count=0 
content=fh.readlines() 
fh.close() 
seq='' 
patt=re.compile('>(.*?)') 
for item in content: 
    m=patt.match(item) 
    if not m: 
     s=item.replace('\n','') 
     seq=seq+s 
seq=seq.replace('\s','')  
print seq 
print 'The length of the coding sequence of the bacillus' 
print len(seq) 
+1

Нежелательные образцы ('(. *?)' В вашем коде) не имеют смысла в конце шаблонов, поскольку они всегда будут соответствовать пустой строке. –

ответ

4
for line in open("clostp1.fa"): 
    name, sequence = map(str.strip,line.split('>')) 
    print "The length of %s is %s"%(name, len(sequence)) 
+0

На самом деле я предпочитаю этот для моего: P – mandel

+0

он будет работать, если каждая строка имеет только один '>';) – user149513

+0

В примерах они имеют только один символ '>'. Если может быть больше одного, нам нужно сказать, что делать с этими линиями. –

1

Если я правильно понял, вы хотите распечатать каждую отдельную последовательность с последующим его длиной, не так ли? Я считаю, что у вас есть функция, чтобы возвращать последовательности, а затем делать то, что когда-либо захотелось с ними.

#!usr/bin/python 
import re 

def get_content(file): 
    """ 
    Returns a dict with the name of the seq and its value 
    """ 
    result = {} 
    for current_line in open(file): 
     name, value = line.strip().split(">") 
     result[name] = value 
    return result 

Вы получаете диктофон, а затем распечатываете все, что вам нужно для печати.

0
for line in open("clostp1.fa"): 
    name, _, seq = line.partition('>') 
    name, seq = name.rstrip(), seq.rstrip() 
    print("The length of {} is {}".format(name, len(seq))) 

partition более уместна тогда split. Вы должны rstrip каждую отдельную часть, и синтаксис форматирования будет работать в py3.1, используйте

print("The length of {0} is {1}".format(name, len(seq))) 

, чтобы заставить его работать в py2.6.

+1

не разделяет возврат 3-х кортежей? –

+0

oops, yes, thanks gnibbler – SilentGhost

0
import re 
pattern = re.compile('(?P<seqname>\w*)\s*>\s*(?P<seqval>\w*)') 
for item in open('clostp1.fa','r').readlines(): 
    m = pattern.match(item) 
    if m: 
     print "sequence name: %s - %s length" % (m.groupdict()['seqname'],len(m.groupdict()['seqval'])) 
+0

вам не нужно иметь .readlines(), вы можете просто перебирать файл. readlines() будет считывать весь файл сразу в памяти, что может быть плохим, если файл очень большой –

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