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

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 '

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

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

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

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

Spróbuj tego!


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


-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

11
Trzy lata po tym, jak zaakceptowana odpowiedź wyraźnie wspomina string.printable, twierdzisz „nie, nie ma”?
Tobias Kienzler
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.