Esiste una libreria Python che contiene un elenco di tutti i caratteri ASCII?


98

Qualcosa come di seguito:

import ascii

print ascii.charlist()

Che restituirebbe qualcosa come [A, B, C, D ...]

Risposte:


163

Le stringcostanti possono essere ciò che desideri. ( documenti )

>>> stringa di importazione
>>> string.ascii_uppercase
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"

Se vuoi tutti i caratteri stampabili:

>>> string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ! "# $% & \' () * +, -. /:;? @ [\\] ^ _` {|} ~ \ t \ n \ r \ x0b \ x0c '

3
Penso che sia un po 'confuso, ASCII non è da aa zma da 0 a 127 codici, che non sono solo lettere.
Andrey

4
string.ascii_lettersè l'intera faccenda!
jathanism

1
@ jathanism - O semplicemente string.letters... string.printableè più vicino (ma non lo stesso) a ciò a cui si riferiva @Andrey, però.
Joe Kington

Suppongo che dipenda dal fatto che l'OP abbia effettivamente bisogno di ogni singolo carattere. string.printablefornisce tutti i caratteri stampabili.
Acorn

il titolo della domanda è chiaro (e si riferisce all'intero set ASCII) ma ad esempio sembra che OP voglia davvero le lettere.
Andrey

32

Ecco qui:

[chr(i) for i in xrange(127)]

Dato che il Stringmodulo è deprecato, questa è la risposta migliore
Devon M

1
@ChuckFulminata, il stringmodulo non è deprecato. Vedi questo , per esempio.
dkasak

@dkasak Fantastico grazie, dimenticavo, il stringmodulo è solo parzialmente deprecato
Devon M

1
Ricorda anche che in Python 3 dovresti chiamare range(127), poiché è rangestato rimosso e xrangerinominato. Inoltre, per ottenere caratteri Unicode in Python 2 dovresti chiamare unichr(i)ma in Python 3 semplicementechr(i)
Benj

1
non dovrebbe essere l'intervallo (128) per 0-127?
Anadact il

14

ASCII definisce 128 caratteri i cui valori di byte vanno da 0 a 127 inclusi. Quindi, per ottenere una stringa di tutti i caratteri ASCII, potresti semplicemente farlo

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

Solo alcuni di questi sono stampabili, tuttavia, i caratteri ASCII stampabili sono accessibili in Python tramite

import string
string.printable

4

Poiché i caratteri stampabili ASCII sono un elenco piuttosto piccolo (byte con valori compresi tra 32 e 127), è abbastanza facile da generare quando necessario:

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

!
"
#
$
%
... # a few lines removed :)
y
z
{
|
}
~

3
for i in range(0,128):
    print chr(i)

Prova questo!


ASCII sarebbe range(0, 128).
dan04

@ dan04 @lucemia ASCII da 0 a 127 , codici estesi fino a 255
Andrey

3
@Andrey: ASCII va da 0 a 127, quindi range (0, 128) in Python. (Un errore comune in molte altre risposte ...)
jtniehof

1

Puoi farlo senza un modulo:

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

Digita characterse dovrebbe stampare ["a","b","c", ... ,"x","y","z"]. Per l'uso in maiuscolo:

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

Qualsiasi intervallo (incluso l'uso dei passaggi di intervallo) può essere utilizzato per questo, perché utilizza Unicode. Pertanto, aumentare il range()per aggiungere più caratteri all'elenco.
map()chiama chr()ogni iterazione di range().


-7

No, non c'è, ma puoi facilmente crearne uno:

    #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

11
Tre anni dopo che la risposta accettata menziona chiaramente string.printable, lei afferma "no, non c'è"?
Tobias Kienzler
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.