Respostas:
A partir daqui :
A função ord () obteria o valor int do char. E caso você queira converter novamente depois de jogar com o número, a função chr () faz o truque.
>>> ord('a')
97
>>> chr(97)
'a'
>>> chr(ord('a') + 3)
'd'
>>>
No Python 2, há também a unichrfunção, retornando o caractere Unicode cujo ordinal é o unichrargumento:
>>> unichr(97)
u'a'
>>> unichr(1234)
u'\u04d2'
No Python 3 você pode usar em chrvez de unichr.
chr(31415) -> '窷'
chr(ord(u'й'.encode('cp1251'))).decode('cp1251') == u'й',. No Python 3 (ou unichrno Python 2), o número de entrada é interpretado como ordinal inteiro do ponto de código Unicode: unichr(0x439) == '\u0439'(os primeiros 256 números inteiros têm o mesmo mapeamento que latin-1 unichr(0xe9) == b'\xe9'.decode('latin-1'):, os primeiros 128 - ascii: unichr(0x0a) == b'\x0a'.decode('ascii')é uma coisa Unicode, não Pitão).
Observe que ord()não fornece o valor ASCII em si; fornece o valor numérico do caractere em qualquer codificação em que esteja. Portanto, o resultado de ord('ä')pode ser 228 se você estiver usando o Latin-1 ou pode aumentar um TypeErrorse estiver usando o UTF-8. Pode até retornar o ponto de código Unicode, se você passar um unicode:
>>> ord(u'あ')
12354
unicodepor padrão. Python3 ( bytes ): str(b'\xc3\x9c', 'ascii')-> gera UnicodeDecodeError . Python3 ( bytes ): str(b'\xc3\x9c', 'utf-8')-> retorna Ü . Você também pode olhar para o pacote de seis .
Você está procurando:
ord()
A resposta aceita está correta, mas há uma maneira mais inteligente / eficiente de fazer isso se você precisar converter um monte de caracteres ASCII em seus códigos ASCII de uma só vez. Em vez de fazer:
for ch in mystr:
code = ord(ch)
ou um pouco mais rápido:
for code in map(ord, mystr):
você converte em tipos nativos do Python que iteram os códigos diretamente. No Python 3, é trivial:
for code in mystr.encode('ascii'):
e no Python 2.6 / 2.7, é apenas um pouco mais envolvido porque não possui um bytesobjeto de estilo Py3 ( bytesé um alias para str, que itera por caractere), mas eles têm 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'):
Codificar como um tipo que itera nativamente por ordinal significa que a conversão é muito mais rápida; em testes locais tanto no Py2.7 quanto no Py3.5, a iteração de strpara obter seus códigos ASCII map(ord, mystr)começa demorando cerca de duas vezes mais para um len10 do strque bytearray(mystr)no Py2 ou mystr.encode('ascii')no Py3 e, à medida que straumenta, o multiplicador pago map(ord, mystr)aumenta para ~ 6,5x-7x.
A única desvantagem é que a conversão é toda de uma só vez; portanto, seu primeiro resultado pode demorar um pouco mais, e um enorme enorme strterá um temporário proporcionalmente grande bytes/ bytearray, mas, a menos que isso o force a se debater na página, é provável que isso não importe. .