Gibt es eine Python-Bibliothek, die eine Liste aller ASCII-Zeichen enthält?

98

So etwas wie unten:

import ascii

print ascii.charlist()

Was so etwas wie [A, B, C, D ...] zurückgeben würde

Rechteck
quelle

Antworten:

162

Die stringKonstanten können das sein, was Sie wollen. ( docs )

>>> Zeichenfolge importieren
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

Wenn Sie alle druckbaren Zeichen möchten:

>>> string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ! "# $% & \' () * +, -. / :;? @ [\\] ^ _` {|} ~ \ t \ n \ r \ x0b \ x0c '
Eichel
quelle
3
Ich finde es etwas verwirrend, ASCII ist nicht von abis, zsondern von 0 bis 127 Codes, das sind nicht nur Buchstaben.
Andrey
4
string.ascii_lettersist der ganze Schebang!
Nathanismus
1
@jathanism - Oder einfach string.letters... string.printableist näher (aber nicht dasselbe) an dem, worauf sich @Andrey bezog.
Joe Kington
Ich nehme an, es hängt davon ab, ob das OP tatsächlich jedes einzelne Zeichen benötigt. string.printablegibt alle druckbaren Zeichen an.
Eichel
Der Titel der Frage ist klar (und bezieht sich auf den gesamten ASCII-Satz), aber im Beispiel sieht es so aus, als ob OP wirklich Buchstaben will.
Andrey
32

Hier ist es:

[chr(i) for i in xrange(127)]
Simon
quelle
Angesichts der Tatsache, dass das StringModul veraltet ist, ist dies die beste Antwort
Devon M
@ChuckFulminata, das stringModul ist nicht veraltet. Siehe dies zum Beispiel.
Dkasak
@dkasak Cool danke, ich habe vergessen, das stringModul ist nur teilweise veraltet
Devon M
1
Denken Sie auch daran, dass Sie in Python 3 aufrufen sollten range(127), da rangees entfernt und umbenannt wurde xrange. Um Unicode-Zeichen in Python 2 zu erhalten, sollten Sie auch unichr(i)in Python 3 einfach aufrufenchr(i)
Benj
1
sollte es nicht Bereich (128) für 0-127 sein?
Anadactothe
14

ASCII definiert 128 Zeichen, deren Bytewerte zwischen 0 und einschließlich 127 liegen. Um eine Zeichenfolge aller ASCII-Zeichen zu erhalten, können Sie dies einfach tun

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

Nur einige davon sind druckbar, auf die druckbaren ASCII-Zeichen kann jedoch in Python über zugegriffen werden

import string
string.printable
gsteff
quelle
4

Da druckbare ASCII-Zeichen eine ziemlich kleine Liste sind (Bytes mit Werten zwischen 32 und 127), ist es einfach genug, sie bei Bedarf zu generieren:

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

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

Versuche dies!

Lucämie
quelle
ASCII wäre range(0, 128).
dan04
@ dan04 @lucemia ASCII von 0 bis 127 , erweiterte Codes sind bis zu 255
Andrey
3
@Andrey: ASCII liegt zwischen 0 und 127, also Bereich (0, 128) in Python. (Ein häufiger Fehler in mehreren anderen Antworten ...)
jtniehof
1

Sie können dies ohne Modul tun:

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

Geben Sie ein charactersund es sollte gedruckt werden ["a","b","c", ... ,"x","y","z"]. Für Großbuchstaben verwenden:

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

Hierfür kann jeder Bereich (einschließlich der Verwendung von Bereichsschritten) verwendet werden, da Unicode verwendet wird. Erhöhen Sie daher die range(), um der Liste weitere Zeichen hinzuzufügen.
map()ruft chr()jede Iteration des auf range().

Benj
quelle
-7

Nein, gibt es nicht, aber Sie können leicht eine machen:

    #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
Python-Programmierer
quelle
11
Drei Jahre nachdem die akzeptierte Antwort eindeutig erwähnt hat string.printable, behaupten Sie "nein, gibt es nicht"?
Tobias Kienzler