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

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 '

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)]

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

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
{
|
}
~

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

Versuche dies!


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().


-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

11
Drei Jahre nachdem die akzeptierte Antwort eindeutig erwähnt hat string.printable, behaupten Sie "nein, gibt es nicht"?
Tobias Kienzler
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.