Existe-t-il une bibliothèque Python qui contient une liste de tous les caractères ascii?

98

Quelque chose comme ci-dessous:

import ascii

print ascii.charlist()

Ce qui renverrait quelque chose comme [A, B, C, D ...]

rectangle
la source

Réponses:

162

Les stringconstantes peuvent être ce que vous voulez. ( docs )

>>> chaîne d'importation
>>> string.ascii_uppercase
«ABCDEFGHIJKLMNOPQRSTUVWXYZ»

Si vous voulez tous les caractères imprimables:

>>> chaîne imprimable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ! "# $% & \' () * +, -. /:;? @ [\\] ^ _` {|} ~ \ t \ n \ r \ x0b \ x0c '
Gland
la source
3
Je pense que c'est un peu déroutant, ASCII n'est pas de aà zmais de 0 à 127 codes, ce ne sont pas que des lettres.
Andrey
4
string.ascii_lettersest tout le shebang!
jathanism
1
@jathanism - Ou juste string.letters... string.printableest plus proche (mais pas la même chose) de ce à quoi @Andrey faisait référence, cependant.
Joe Kington
Je suppose que cela dépend si l'OP a réellement besoin de chaque caractère. string.printabledonne tous les caractères imprimables.
Acorn
Le titre de la question est clair (et il fait référence à l'ensemble ASCII), mais dans l'exemple, il semble que OP veut vraiment des lettres.
Andrey
32

C'est ici:

[chr(i) for i in xrange(127)]
Simon
la source
Étant donné que le Stringmodule est obsolète, c'est la meilleure réponse
Devon M
@ChuckFulminata, le stringmodule n'est pas obsolète. Voyez ceci , par exemple.
dkasak
@dkasak Cool merci, j'ai oublié, le stringmodule n'est que partiellement obsolète
Devon M
1
Rappelez-vous également que dans Python 3, vous devez appeler range(127), car il a rangeété supprimé et xrangerenommé. Aussi, pour obtenir des caractères Unicode en Python 2, vous devez appeler unichr(i)mais en Python 3 simplementchr(i)
Benj
1
ne devrait-il pas être la plage (128) pour 0-127?
Anadactothe
14

ASCII définit 128 caractères dont les valeurs d'octet vont de 0 à 127 inclus. Donc, pour obtenir une chaîne de tous les caractères ASCII, vous pouvez simplement faire

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

Cependant, seuls certains d'entre eux sont imprimables - les caractères ASCII imprimables sont accessibles en Python via

import string
string.printable
gsteff
la source
4

Étant donné que les caractères imprimables ASCII sont une assez petite liste (octets avec des valeurs comprises entre 32 et 127), il est assez facile à générer lorsque vous avez besoin:

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

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

Essaye ça!

lucémie
la source
ASCII serait range(0, 128).
dan04
@ dan04 @lucemia ASCII de 0 à 127 , les codes étendus vont jusqu'à 255
Andrey
3
@Andrey: ASCII va de 0 à 127, donc range (0, 128) en Python. (Une erreur courante dans plusieurs autres réponses ...)
jtniehof
1

Vous pouvez le faire sans module:

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

Tapez characterset il devrait s'imprimer ["a","b","c", ... ,"x","y","z"]. Pour une utilisation en majuscules:

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

Toute plage (y compris l'utilisation d'étapes de plage) peut être utilisée pour cela, car elle utilise Unicode. Par conséquent, augmentez le range()pour ajouter plus de caractères à la liste.
map()appelle chr()chaque itération du range().

Benj
la source
-7

Non, il n'y en a pas, mais vous pouvez facilement en créer un:

    #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
programmeur python
la source
11
Trois ans après que la réponse acceptée mentionne clairement string.printable, vous dites "non, il n'y en a pas"?
Tobias Kienzler