Existe uma biblioteca Python que contém uma lista de todos os caracteres ascii?

98

Algo como abaixo:

import ascii

print ascii.charlist()

Que retornaria algo como [A, B, C, D ...]

retângulo
fonte

Respostas:

162

As stringconstantes podem ser o que você deseja. ( docs )

>>> importar string
>>> string.ascii_uppercase
'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z'

Se você quiser todos os caracteres imprimíveis:

>>> string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ! "# $% & \' () * +, -. /:;? @ [\\] ^ _` {|} ~ \ t \ n \ r \ x0b \ x0c '
Bolota
fonte
3
Acho um pouco confuso, ASCII não é de aa zmas de 0 a 127 códigos, ou seja, não são apenas letras.
Andrey
4
string.ascii_lettersé a coisa toda!
jathanismo
1
@jathanism - Ou apenas string.letters... string.printableestá mais próximo (mas não é o mesmo) do que @Andrey estava se referindo.
Joe Kington
Suponho que depende se o OP realmente precisa de cada caractere. string.printablefornece todos os caracteres imprimíveis.
Acorn
o título da pergunta é claro (e se refere a todo o conjunto ASCII), mas, por exemplo, parece que OP realmente quer letras.
Andrey
32

Aqui está:

[chr(i) for i in xrange(127)]
Simon
fonte
Dado que o Stringmódulo está obsoleto, esta é a melhor resposta
Devon M
@ChuckFulminata, o stringmódulo não está obsoleto. Veja isso , por exemplo.
dkasak 01 de
@dkasak Legal, obrigado, esqueci, o stringmódulo está apenas parcialmente obsoleto
Devon M
1
Lembre-se também que no Python 3 você deve chamar range(127), pois rangefoi removido e xrangerenomeado. Além disso, para obter caracteres Unicode no Python 2, você deve chamar, unichr(i)mas no Python 3 simplesmentechr(i)
Benj
1
não deveria ser o intervalo (128) para 0-127?
Anadactothe
14

ASCII define 128 caracteres cujos valores de byte variam de 0 a 127 inclusive. Então, para obter uma string de todos os caracteres ASCII, você pode simplesmente fazer

''.join([chr(i) for i in range(128)])

Apenas alguns deles são imprimíveis, no entanto - os caracteres ASCII imprimíveis podem ser acessados ​​em Python via

import string
string.printable
gsteff
fonte
4

Como os caracteres ASCII imprimíveis são uma lista muito pequena (bytes com valores entre 32 e 127), é fácil de gerar quando você precisa:

>>> for c in (chr(i) for i in range(32,127)):
...     print c
... 

!
"
#
$
%
... # a few lines removed :)
y
z
{
|
}
~
Sarnold
fonte
3
for i in range(0,128):
    print chr(i)

Experimente isso!

lucemia
fonte
ASCII seria range(0, 128).
dan04
@ dan04 @lucemia ASCII de 0 a 127 , os códigos estendidos são até 255
Andrey
3
@Andrey: ASCII é de 0 a 127, portanto, intervalo (0, 128) em Python. (Um erro comum em várias outras respostas ...)
jtniehof
1

Você pode fazer isso sem um módulo:

    characters = list(map(chr, range(97,123)))

Digite characterse deve imprimir ["a","b","c", ... ,"x","y","z"]. Para uso em maiúsculas:

    characters=list(map(chr,range(65,91)))

Qualquer intervalo (incluindo o uso de etapas de intervalo) pode ser usado para isso, porque faz uso de Unicode. Portanto, aumente o range()para adicionar mais caracteres à lista.
map()chama chr()cada iteração do range().

Benj
fonte
-7

Não, não existe, mas você pode facilmente fazer um:

    #Your ascii.py program:
    def charlist(begin, end):
        charlist = []
        for i in range(begin, end):
            charlist.append(chr(i))
        return ''.join(charlist)

    #Python shell:
    #import ascii
    #print(ascii.charlist(50, 100))
    #Comes out as:

    #23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abc
pythonprogrammer
fonte
11
Três anos após a resposta aceita mencionar claramente string.printable, você afirma "não, não há"?
Tobias Kienzler