2016-08-08 23 views
1

Was wäre der richtige Weg, um Dezimalzahlen in ASCII-Darstellung in Python zu konvertieren? Ich habe eine Reihe von Zeilen wie folgt: 99104101101115101 und wenn ich diese Zahlen manuell auf '99 104 101 101 115 101' getrennt, dann wird es geben 'cheese'. Quelldatensatz hat keine Leerzeichen, keine Trennzeichen. Angenommen, die Daten enthalten nur Zeichen in a-z A-Z 0-9.konvertieren Dezimalzahlen in Ascii

+7

Sie müssen die Zahlen aufgeteilt würden in gültige ASCII-Bereiche, wie würden Sie jedoch wissen, dass die '99 104' nicht zum Beispiel' 9 9 10 4' sein sollte? –

+0

@ cricket_007 Wenn das OP angegeben, dass die Zeichen alle A-Z a-z sind, wäre dies lösbar, aber das ist nicht angegeben. Ich stimme aus diesem Grund, diese Frage als "Unklar was du fragst" zu schließen. – intboolstring

+1

Betrachten wir a-zA-Z0-9 als gültige Bereiche. Irgendwelche Vorschläge von Code? – zerocool

Antwort

3
>>> import re 
>>> re.sub('1?..', lambda m: chr(int(m.group())), '99104101101115101') 
'cheese' 

Demo mit einem zufälligen Zeichenfolge von einer Million printable ASCII characters:

>>> import random 
>>> original = ''.join(chr(random.randrange(32, 127)) for _ in range(1000000)) 
>>> len(original), original[:50] 
(1000000, '[email protected]=`/Z*s,\\[email protected] PgZ/CE"Nq\\wXvqvDn`&)~BmP$n;f') 

>>> encoded = ''.join(str(ord(c)) for c in original) 
>>> len(encoded), encoded[:50] 
(2284738, '84121456411756907411010461964790421154492436484328') 

>>> decoded = re.sub('1?..', lambda m: chr(int(m.group())), encoded) 
>>> decoded == original 
True 
+0

Gute Antwort auf eine schlechte Frage. +1 – intboolstring

+2

Echt schlau, +1. Könnte spektakulär ausfallen, wenn die Daten schlecht sind, aber wen interessiert das? – wim

+0

Tolle Antwort Stefan, danke. – zerocool

1

Der druckbare ASCII-Bereich reicht von 32 bis 126 Also:

>>> s = '99104101101115101' 
>>> s2 = re.sub('3[2-9]|[4-9][0-9]|1[0-1][0-9]|12[0-6]', r' \g<0>', s) 
>>> s2 
' 99 104 101 101 115 101' 
>>> ''.join(chr(int(x)) for x in s2.split()) 
'cheese' 
Verwandte Themen