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.