Question

Comment puis-je obtenir la ASCII valeur d'un caractère sous forme de int dans Python ?

Était-ce utile?

La solution

De ici :

  

function ord () obtiendrait la valeur int   de l'omble. Et au cas où vous voudriez   reconvertir après avoir joué avec le   nombre, fonction chr () fait le tour.

>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>

Dans Python 2, il existe également la fonction unichr , qui renvoie la Unicode caractère dont l'ordinal est l'argument unichr :

>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'

En Python 3, vous pouvez utiliser chr au lieu de unichr .

ord () - documentation Python 3.6.5rc1

ord () - documentation Python 2.7.14

Autres conseils

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 ('& # 228;') peut être 228 si vous utilisez Latin-1, ou déclenchez un TypeError si vous utilisez UTF-8. Il peut même renvoyer le code codé Unicode à la place si vous lui transmettez un unicode:

>>> ord(u'あ')
12354

Vous recherchez:

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 légèrement plus rapide:

for code in map(ord, mystr):

vous convertissez en types natifs Python qui itèrent 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 d’objet octets de style Py3 ( octets 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; lors des tests locaux sur Py2.7 et Py3.5, itérer un str pour obtenir ses codes ASCII à l'aide de map (ord, mystr) prend environ deux fois plus de temps 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 la carte (ord, mystr) s'élève à ~ 6,5x-7x.

Le seul inconvénient est que la conversion s'effectue en une seule fois. Votre premier résultat risque donc de prendre un peu plus de temps. Un str vraiment énorme aurait un octets / bytearray , mais à moins que cela ne vous oblige à balayer des pages, cela n’aura probablement aucune importance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top