Risposte:
Da qui :
La funzione ord () otterrebbe il valore int del carattere. E nel caso tu voglia tornare indietro dopo aver giocato con il numero, la funzione chr () fa il trucco.
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
In Python 2, c'è anche la unichr
funzione, che restituisce il carattere Unicode il cui ordinale è l' unichr
argomento:
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
In Python 3 puoi usare chr
invece di unichr
.
chr(31415) -> '窷'
chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'
. In Python 3 (o unichr
in Python 2), il numero di input viene interpretato come numero intero di punti di codice Unicode ordinale: unichr(0x439) == '\u0439'
(i primi 256 numeri interi hanno la stessa mappatura di latino-1 unichr(0xe9) == b'\xe9'.decode('latin-1')
:, i primi 128 - ascii: unichr(0x0a) == b'\x0a'.decode('ascii')
è una cosa Unicode, non Pitone).
Nota che ord()
non ti dà il valore ASCII in sé; ti dà il valore numerico del personaggio in qualunque codifica sia. Pertanto il risultato di ord('ä')
può essere 228 se stai usando Latin-1, oppure può aumentare a TypeError
se stai usando UTF-8. Può anche restituire il punto di codice Unicode invece se gli passi un unicode:
>>> ord(u'あ')
12354
Stai cercando:
ord()
La risposta accettata è corretta, ma esiste un modo più intelligente / efficiente per farlo se è necessario convertire contemporaneamente un intero gruppo di caratteri ASCII nei loro codici ASCII. Invece di fare:
for ch in mystr:
code = ord(ch)
o leggermente più veloce:
for code in map(ord, mystr):
converti in tipi nativi di Python che ripetono direttamente i codici. Su Python 3, è banale:
for code in mystr.encode('ascii'):
e su Python 2.6 / 2.7, è solo leggermente più coinvolto perché non ha un bytes
oggetto in stile Py3 ( bytes
è un alias per str
, che scorre per carattere), ma hanno 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'):
La codifica come un tipo che itera in modo nativo per ordinale significa che la conversione procede molto più velocemente; nei test locali su Py2.7 e Py3.5, l'iterazione di a str
per ottenere i suoi codici ASCII usando map(ord, mystr)
inizia prendendo circa il doppio del tempo per un len
10 str
rispetto all'utilizzo bytearray(mystr)
su Py2 o mystr.encode('ascii')
su Py3 e, man mano che str
si allunga, il moltiplicatore paga per gli map(ord, mystr)
aumenti a ~ 6.5x-7x.
L'unico aspetto negativo è che la conversione è tutta in una volta, quindi il tuo primo risultato potrebbe richiedere un po 'più di tempo, e un enorme davvero str
avrebbe un temporaneo proporzionalmente grande bytes
/ bytearray
, ma a meno che ciò non ti costringa a sfogliare le pagine, questo non è probabilmente importante .