De ici :
function 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 () fera l'affaire.
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
Dans Python 2, il y a aussi la fonction unichr
qui renvoie le caractère nicode dont l'ordinal est l'argument unichr
:
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
Dans Python 3, vous pouvez utiliser chr
au lieu de unichr
.
Notez que ord()
ne vous donne pas la valeur ASCII en soi; il vous donne la valeur numérique du caractère, quel que soit son codage. Par conséquent, le résultat de ord('ä')
peut être 228 si vous utilisez Latin-1, ou il peut générer un TypeError
si vous êtes en utilisant UTF-8. Il peut même renvoyer le code codé Unicode à la place si vous lui transmettez un unicode:
>>> ord(u'あ')
12354
Tu recherches:
ord()
La réponse acceptée est correcte, mais il existe un moyen plus astucieux/efficace de le faire si vous devez convertir tout un tas de caractères ASCII en leurs codes ASCII à la fois. Au lieu de faire:
for ch in mystr:
code = ord(ch)
ou le légèrement plus rapide:
for code in map(ord, mystr):
vous convertissez en Python types natifs qui traitent directement les codes. 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 de style Py3 bytes
object (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 de manière native par ordinal signifie que la conversion est beaucoup plus rapide; dans les tests locaux sur Py2.7 et Py3.5, itérer un str
pour obtenir ses codes ASCII à l'aide de map(ord, mystr)
commence à prendre environ deux fois plus longtemps pour un len
10 str
que d'utiliser bytearray(mystr)
sur Py2 ou mystr.encode('ascii')
sur Py3, et à mesure que str
s'allonge, le multiplicateur payé pour map(ord, mystr)
s'élève à ~ 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 longtemps, et un str
vraiment énorme aurait une proportion relativement importante de bytes
/bytearray
, mais à moins que cela ne vous oblige à balayer des pages, cela n’aura probablement aucune importance.