Czy istnieje biblioteka Pythona zawierająca listę wszystkich znaków ASCII?

98

Coś jak poniżej:

import ascii

print ascii.charlist()

Który zwróciłby coś w rodzaju [A, B, C, D ...]

prostokąt
źródło

Odpowiedzi:

163

Na stringstałe może być to, co chcesz. ( dokumenty )

>>> importuj ciąg
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTU VWXYZ'

Jeśli chcesz wszystkie drukowalne znaki:

>>> string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ! "# $% & \' () * +, -. /:;? @ [\\] ^ _` {|} ~ \ t \ n \ r \ x0b \ x0c '
Żołądź
źródło
3
Myślę, że to trochę zagmatwane, ASCII to nie od ado, zale od 0 do 127 kodów, czyli nie tylko litery.
Andrey
4
string.ascii_lettersto cały shebang!
jatanizm
1
@jathanism - Lub po prostu string.letters... string.printablejest bliżej (ale nie to samo) do tego, do czego odnosił się @Andrey.
Joe Kington
Przypuszczam, że zależy to od tego, czy OP faktycznie potrzebuje każdego pojedynczego znaku. string.printabledaje wszystkie drukowalne znaki.
Żołądź
tytuł pytania jest jasny (i odnosi się do całego zestawu ASCII), ale w przykładzie wygląda na to, że OP naprawdę chce liter.
Andrey
32

Oto ona:

[chr(i) for i in xrange(127)]
Szymon
źródło
Biorąc pod uwagę, że Stringmoduł jest przestarzały, jest to najlepsza odpowiedź
Devon M
1
@ChuckFulminata, stringmoduł nie jest przestarzały. Zobacz to na przykład.
dkasak
@dkasak Super dzięki, zapomniałem, stringmoduł jest tylko częściowo wycofany
Devon M
1
Pamiętaj również, że w Pythonie 3 powinieneś wywołać range(127), ponieważ rangezostał usunięty i xrangezmieniony. Ponadto, aby uzyskać znaki Unicode w Pythonie 2, powinieneś wywołać, unichr(i)ale w Pythonie 3 po prostuchr(i)
Benj
1
czy nie powinien to być zakres (128) dla 0-127?
Anadactothe
14

ASCII definiuje 128 znaków, których wartości bajtów mieszczą się w zakresie od 0 do 127 włącznie. Aby uzyskać ciąg wszystkich znaków ASCII, możesz po prostu to zrobić

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

Jednak tylko niektóre z nich można wydrukować - do drukowalnych znaków ASCII można uzyskać dostęp w Pythonie przez

import string
string.printable
gsteff
źródło
4

Ponieważ drukowalne znaki ASCII to dość mała lista (bajty o wartościach od 32 do 127), łatwo je wygenerować, gdy potrzebujesz:

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

!
"
#
$
%
... # a few lines removed :)
y
z
{
|
}
~
sarnold
źródło
3
for i in range(0,128):
    print chr(i)

Spróbuj tego!

lukemia
źródło
ASCII byłoby range(0, 128).
dan04
@ dan04 @lucemia ASCII od 0 do 127 , rozszerzone kody do 255
Andrey
3
@Andrey: ASCII wynosi od 0 do 127, więc zakres (0, 128) w Pythonie. (
Częsty
1

Możesz to zrobić bez modułu:

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

Wpisz charactersi powinno się wydrukować ["a","b","c", ... ,"x","y","z"]. W przypadku używania wielkich liter:

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

Można do tego użyć dowolnego zakresu (w tym użycia kroków zakresu), ponieważ korzysta z Unicode. Dlatego zwiększ, range()aby dodać więcej znaków do listy.
map()wywołuje chr()każdą iterację range().

Benj
źródło
-7

Nie, nie ma, ale możesz łatwo to zrobić:

    #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
źródło
11
Trzy lata po tym, jak zaakceptowana odpowiedź wyraźnie wspomina string.printable, twierdzisz „nie, nie ma”?
Tobias Kienzler