2016-12-06 9 views
0

Ich versuche, in ASCII kodierten Text innerhalb einer DNA-Sequenz aus einer Datei zu finden.In Python decodieren

Unten ist mein Code:

Die erste ist die FASTA-Datei zu öffnen und legen Sie eine Variable.

with open("/home/<username>/python/progseq") as mydnaseq: 
    sequence = mydnaseq.read().replace('\n','') 

Das zweite Bit ist die Sequenz in binären und tat dies für die Buchstaben C und G/T zu übersetzen gleich 1:

binarysequence = sequence.replace('A','0') 

Dann nahm ich diese loooooong binäre Folge und machen wollte es in 8bits:

for i in range(0,len(binarysequence),8): 
    binarysequence [i:i+8] 

Dieser erstellt dann eine Ausgabe wie folgt aus:

'00110100' 
    '00110010' 
    '01000110' 
    '00011000' 
    '0' 

Obwohl ich eine viel längere Ausgabe hatte, habe ich nur die letzten vier der Sequenz aufgenommen.

Wollte wissen, wie man das in Buchstaben umwandelt.

+1

Mit 'sequence.encode()' können Sie eine ASCII-Zeichenkette in eine Binärdatei (Bytes) umwandeln. Die Funktion ersetzt jedes Zeichen durch seinen 8-Bit-ASCII-Zeichencode. Zum Beispiel wird 'A' 65. Aber was hast du als nächstes mit diesen Bits vor? – DyZ

+0

Hallo @DYZ, danke für die Antwort. Ich wollte diese Reihe von 8 Bits (nicht nur diese vier) durch das entsprechende ASCII-Zeichen ersetzen, da mir gesagt wurde, dass es ein Gedicht enthüllen soll. Ich weiß nur noch nicht wie es ist und ich frage mich, ob ich encode() oder decode() benutzen soll oder ob es eine andere Annäherung gibt. Ich hoffe ich mache Sinn. Ich bin neu in der Programmierwelt. –

+0

Ich hätte ord() nicht verwenden sollen, aber jeden Buchstaben ([A, C = 0] [T, G = 1]) entsprechend übersetzen. Ich bin mir nur unsicher, wo ich jetzt damit anfangen soll. –

Antwort

0

Mit z.B. a = '10010000', können Sie

b = chr(int(a, 2)) 

zum ersten konvertieren a in eine ganze Zahl nicht auf die binäre Zahl basiert und dann diese ganze Zahl als Zeichen interpretieren. Beachten Sie, dass viele dieser 8-Bit-Ganzzahlen nicht zu lesbaren Zeichen führen!

Ein konkretes Beispiel ist

b = chr(int('01111000', 2)) 
print(b) 

die in 'x' führen gedruckt wird.

+0

Vielen Dank für die Antwort. Ich habe versucht, b = chr (int (binarysequence, 2)), aber Python sagte mir, es sei zu groß. Ich versuche zu vermeiden, jedes Byte manuell einzugeben, da ich zu viele habe und ich bin mir sicher, dass es einen einfacheren Weg gibt. Ich bin mir noch nicht sicher, was es ist. Danke nochmal. –

+0

Was meinst du * manuell *? Warum nicht einfach 'chr (int (binarysequence [i: i + 8], 2))' in deiner Schleife verwenden und vielleicht das Ergebnis an eine Liste anhängen? –

+0

Danke für Ihren Vorschlag. Es hat wirklich geholfen! :) –

Verwandte Themen