Antworten:
Von hier aus :
Die Funktion ord () würde den int-Wert des Zeichens erhalten. Und falls Sie nach dem Spielen mit der Zahl wieder konvertieren möchten, erledigt die Funktion chr () den Trick.
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
In Python 2 gibt es auch die unichr
Funktion, die das Unicode- Zeichen zurückgibt, dessen Ordnungszahl das unichr
Argument ist:
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
In Python 3 können Sie chr
anstelle von verwenden unichr
.
chr(31415) -> '窷'
chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'
. In Python 3 (oder unichr
in Python 2) wird die Eingabenummer als Unicode-Codepunkt-Ganzzahl-Ordnungszahl interpretiert: unichr(0x439) == '\u0439'
(Die ersten 256 Ganzzahlen haben dieselbe Zuordnung wie Latin-1 : unichr(0xe9) == b'\xe9'.decode('latin-1')
, die ersten 128 - ASCII: unichr(0x0a) == b'\x0a'.decode('ascii')
Es handelt sich nicht um eine Unicode-Sache Python).
Beachten Sie, dass ord()
Sie nicht den ASCII-Wert an sich erhalten. Es gibt Ihnen den numerischen Wert des Zeichens in der Codierung, in der es sich befindet. Daher kann das Ergebnis von ord('ä')
228 sein, wenn Sie Latin-1 verwenden, oder es kann a auslösen, TypeError
wenn Sie UTF-8 verwenden. Es kann sogar den Unicode-Codepunkt zurückgeben, wenn Sie ihm einen Unicode übergeben:
>>> ord(u'あ')
12354
Du suchst nach:
ord()
Die akzeptierte Antwort ist korrekt, aber es gibt eine cleverere / effizientere Möglichkeit, dies zu tun, wenn Sie eine ganze Reihe von ASCII-Zeichen gleichzeitig in ihre ASCII-Codes konvertieren müssen. Anstatt zu tun:
for ch in mystr:
code = ord(ch)
oder das etwas schneller:
for code in map(ord, mystr):
Sie konvertieren in native Python-Typen, die die Codes direkt iterieren. Unter Python 3 ist es trivial:
for code in mystr.encode('ascii'):
und in Python 2.6 / 2.7 ist es nur geringfügig komplizierter, da es kein bytes
Objekt im Py3-Stil hat ( bytes
ist ein Alias für str
, der nach Zeichen iteriert), aber sie haben bytearray
:
# If mystr is definitely str, not unicode
for code in bytearray(mystr):
# If mystr could be either str or unicode
for code in bytearray(mystr, 'ascii'):
Das Codieren als Typ, der nativ durch Ordnungszahlen iteriert, bedeutet, dass die Konvertierung viel schneller erfolgt. in lokalen Tests sowohl Py2.7 und Py3.5, ein Iterieren str
seiner ASCII - Codes zu erhalten map(ord, mystr)
für eine beginnt etwa doppelt so lange unter len
10 str
als die Verwendung von bytearray(mystr)
auf Py2 oder mystr.encode('ascii')
auf PY3, und wie die str
länger wird, der Multiplikator für bezahlte map(ord, mystr)
steigen bis ~ 6,5x-7x.
Der einzige Nachteil ist , dass die Umstellung auf einmal, so dass Ihre erste Ergebnis ein wenig länger dauern könnte, und ein wirklich enorm str
eine verhältnismäßig große temporäre würde bytes
/ bytearray
, aber es sei denn , dies zwingt Sie in Seite Dreschen, dann ist dies wahrscheinlich nicht Sache .