Réponses:
D' ici :
La fonction ord () obtiendrait la valeur int du caractère. Et au cas où vous voudriez reconvertir après avoir joué avec le nombre, la fonction chr () fait l'affaire.
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
En Python 2, il y a aussi la unichr
fonction, retournant le caractère Unicode dont l'ordinal est l' unichr
argument:
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
Dans Python 3, vous pouvez utiliser à la chr
place de unichr
.
chr(31415) -> '窷'
chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й'
. En Python 3 (ou unichr
en Python 2), le numéro d'entrée est interprété comme un nombre entier codé Unicode ordinal: unichr(0x439) == '\u0439'
(les 256 premiers entiers ont le même mappage que latin-1 unichr(0xe9) == b'\xe9'.decode('latin-1')
:, les 128 premiers - ascii: unichr(0x0a) == b'\x0a'.decode('ascii')
c'est une chose Unicode, pas Python).
Notez que ord()
cela ne vous donne pas la valeur ASCII en soi; il vous donne la valeur numérique du caractère dans l'encodage quel qu'il soit. Par conséquent, le résultat de ord('ä')
peut être 228 si vous utilisez Latin-1, ou il peut augmenter un TypeError
si vous utilisez UTF-8. Il peut même retourner le point de code Unicode à la place si vous lui passez un unicode:
>>> ord(u'あ')
12354
Tu recherches:
ord()
La réponse acceptée est correcte, mais il existe un moyen plus intelligent / efficace de le faire si vous devez convertir un tas de caractères ASCII en leurs codes ASCII à la fois. Au lieu de faire:
for ch in mystr:
code = ord(ch)
ou légèrement plus rapide:
for code in map(ord, mystr):
vous convertissez en types natifs Python qui itèrent les codes directement. Sur Python 3, c'est trivial:
for code in mystr.encode('ascii'):
et sur Python 2.6 / 2.7, il n'est que légèrement plus impliqué car il n'a pas d' bytes
objet de style Py3 ( bytes
est un alias pour str
, qui itère par caractère), mais ils ont 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'):
Le codage en tant que type qui itère nativement par ordinal signifie que la conversion va beaucoup plus vite; dans les tests locaux sur Py2.7 et Py3.5, itérer un str
pour obtenir ses codes ASCII en utilisant les map(ord, mystr)
démarrages prend environ deux fois plus de temps pour un len
10 str
que bytearray(mystr)
sur Py2 ou mystr.encode('ascii')
Py3, et à mesure que le temps str
s'allonge, le multiplicateur paie pour les map(ord, mystr)
hausses à ~ 6,5x-7x.
Le seul inconvénient est que la conversion est tout à la fois, donc votre premier résultat pourrait prendre un peu plus de temps, et un énorme vraiment str
aurait un temporaire bytes
/ proportionnellement grand bytearray
, mais à moins que cela ne vous oblige à la page thrashing, cela ne devrait pas avoir d'importance .