2016-03-29 6 views
0

Ich habe mehrere Datensätze in Phylip Format (unten angegebenen), die ich Fasta konvertieren möchte (unten angegebenen) mit diesem Python-Code:Iterieren in Python gibt verschiedene op

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() 

Dies ist, was mein Phylip (input_sequences) wie folgt aussehen:

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 

Und das ist, was ich meine output_sequences mag (in Fasta-Format) wie folgt aussehen:

>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 

Wenn ich den obigen Code ausführen, bekomme ich die richtige Ausgabe für j = 1, aber das ist folgende j (2: 9) ich diese Ausgabe

\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 

(... ist die fortgesetzte Sequenz und rot invertiert erhalten Fragezeichen ist, was ich sehe, wenn ich in text wrangler Unsichtbares zeige).

Ich denke, die allgemeine Frage, und warum ich verwirrt bin, ist, warum/wie der Code für j = 1 gut funktionieren kann, aber nicht den Rest der Zahlen? Und wie löst man dieses Problem?

Vielen Dank im Voraus!

+0

Wenn Sie leere Zeilen verwenden 'wenn line.strip()', auch glob finden wollen https://docs.python.org/2/library/glob .html und BioPython könnten nützlich sein http://stackoverflow.com/questions/31265282/how-to-randomly-extract-fasta-sequences-using-python/31265485#31265485 –

Antwort

0

Verwenden strip() und Bool Filter:

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') 
Verwandte Themen