2016-03-29 20 views
0

Bu piton kodu kullanarak I (aşağıda belirtilen) Fasta dönüştürmek istiyorum (aşağıda belirtilen) Phylip biçimde birden çok veri kümelerini vardır:yineleme farklı op verir

for j in range(1, 10): 
    inFile = open('/path/to/input_sequence/seqfile_00' +str(j) + '.txt', 'r') 
    outFile = open('/path/to/output_sequence/Fasta/seqfile_00' + str(j) +'.txt', 'w') 
    inLines = inFile.readlines() 
    inFile.close() 
    outLines = inLines[1:17] 
    for line in outLines: 
     if line.startswith('\n'): 
      line = line.replace('\n','') 
     outFile.write(line.replace(' ',' \n').replace('sequence', '>sequence')) 
outFile.close() 

Bu ne benim Phylip (input_sequences) gibi bakmak:

8 1500\n 
\n 
sequence1 CTGTCCTTG...\n 
\n 
sequence2 CTGTCGTTG...\n 
\n 
sequence3 CTGCGTATG...\n 
\n 
sequence4 CTATGCCTG...\n 
\n 
sequence5 AGGTGTAAG...\n 
\n 
sequence6 AGGTGTAAG...\n 
\n 
sequence7 AAATTCAAA...\n 
\n 
sequence8 AAGTCCAAA...\n 
\n 

Ve bu gibi görünmek Fasta formatında benim output_sequences() istiyoruz şeydir:

>sequence1 \n 
CTGTCCTTGG...\n 
>sequence2 \n 
CTGTCGTTGG...\n 
>sequence3 \n 
CTGCGTATGG...\n 
>sequence4 \n 
CTATGCCTGG...\n 
>sequence5 \n 
AGGTGTAAGG...\n 
>sequence6 \n 
AGGTGTAAGA...\n 
>sequence7 \n 
AAATTCAAAG...\n 
>sequence8 \n 
AAGTCCAAAA...\n 
Yukarıdaki kodu çalıştırdığınızda

, doğruyum j = 1 için çıkış ancak aşağıdaki j en olsun (2: 9) alıyorum bu çıkış

\n 
>sequence1 *red inverted question mark*CTGTCCTTGG...\n 
>sequence2 *red inverted question mark*CTGTCGTTGG...\n 
>sequence3 *red inverted question mark*CTGCGTATGG...\n 
>sequence4 *red inverted question mark*CTATGCCTGG...\n 
>sequence5 *red inverted question mark*AGGTGTAAGG...\n 
>sequence6 *red inverted question mark*AGGTGTAAGA...\n 
>sequence7 *red inverted question mark*AAATTCAAAG...\n 
>sequence8 *red inverted question mark*AAGTCCAAAA...\n 

(... devam sırası ve ters kırmızı olduğunu soru işareti metin wrangler invisibles gösterirken gördüğüm şeydir).

Genel soru sanırım ve neden kafam karıştı, neden kod/j = 1 için kodun nasıl iyi çalışabileceğidir, ancak numaraların geri kalanı değil? Ve bu sorunu nasıl çözebilirim?

Şimdiden teşekkürler!

+0

eğer line.strip()' da topak https://docs.python.org/2/library/glob .html ve BioPython yararlı olabilir http://stackoverflow.com/questions/31265282/how-to-randomly-extract-fasta-sequences-using-python/31265485#31265485 –

cevap

0

Kullanım strip() ve bool filtresi: boş satırlar `kullanmak bulmak istiyorsanız

with open('filename') as f: 
    lines = filter(bool, map(lambda x: x.strip(), f.readlines())) 

new_list = [] 

for values in lines: 
    for value in values.split(' '): 
     if value[0].isupper(): 
      new_list.append(value + '\n') 
     else: 
      new_list.append('>' + value + '\n')