Apakah ada Perpustakaan Python yang berisi daftar semua karakter ascii?

98

Sesuatu seperti di bawah ini:

import ascii

print ascii.charlist()

Yang akan menghasilkan sesuatu seperti [A, B, C, D ...]

persegi panjang
sumber

Jawaban:

163

The stringkonstanta mungkin apa yang Anda inginkan. ( dokumen )

>>> impor string
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

Jika Anda ingin semua karakter yang dapat dicetak:

>>> string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ! "# $% & \' () * +, -. /:;? @ [\\] ^ _` {|} ~ \ t \ n \ r \ x0b \ x0c '
Biji pohon ek
sumber
3
Menurut saya agak membingungkan, ASCII bukan dari asampai ztapi dari 0 sampai 127 kode, itu bukan hanya huruf.
Andrey
4
string.ascii_lettersadalah seluruh shebang!
jathanism
1
@jathanism - Atau hanya string.letters... string.printablelebih dekat (tetapi tidak sama) dengan apa yang dimaksud @Andrey.
Joe Kington
Saya kira itu tergantung pada apakah OP benar-benar membutuhkan setiap karakter. string.printablememberikan semua karakter yang dapat dicetak.
Acorn
judul pertanyaannya jelas (dan mengacu pada keseluruhan set ASCII) tetapi dalam contoh sepertinya OP benar-benar menginginkan huruf.
Andrey
32

Ini dia:

[chr(i) for i in xrange(127)]
Simon
sumber
Mengingat bahwa Stringmodul sudah tidak digunakan lagi, ini adalah jawaban terbaik
Devon M
1
@ChuckFulminata, stringmodul ini tidak digunakan lagi. Lihat ini , misalnya.
dkasak
@dkasak Keren terima kasih, saya lupa, stringmodulnya hanya sebagian tidak digunakan lagi
Devon M
1
Ingat juga bahwa di Python 3 Anda harus memanggil range(127), karena rangetelah dihapus dan xrangedinamai ulang. Juga, untuk mendapatkan karakter Unicode dalam Python 2 Anda harus memanggil unichr(i)tetapi dengan Python 3 cukupchr(i)
Benj
1
Bukankah seharusnya jarak (128) untuk 0-127?
Anadactothe
14

ASCII mendefinisikan 128 karakter yang nilai byte-nya berkisar dari 0 hingga 127 inklusif. Jadi untuk mendapatkan string dari semua karakter ASCII, Anda bisa melakukannya

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

Hanya beberapa di antaranya yang dapat dicetak, namun- karakter ASCII yang dapat dicetak dapat diakses dengan Python melalui

import string
string.printable
gsteff.dll
sumber
4

Karena karakter ASCII yang dapat dicetak adalah daftar yang cukup kecil (byte dengan nilai antara 32 dan 127), itu cukup mudah untuk dibuat saat Anda membutuhkan:

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

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

Coba ini!

lucemia
sumber
ASCII akan range(0, 128).
dan04
@ dan04 @lucemia ASCII dari 0 hingga 127 , kode diperpanjang hingga 255
Andrey
3
@Andrey: ASCII adalah dari 0 hingga 127, jadi rentang (0, 128) dengan Python. (Kesalahan umum dalam beberapa jawaban lain ...)
jtniehof
1

Anda dapat melakukan ini tanpa modul:

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

Ketik charactersdan itu harus dicetak ["a","b","c", ... ,"x","y","z"]. Untuk penggunaan huruf besar:

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

Rentang apa pun (termasuk penggunaan langkah rentang) dapat digunakan untuk ini, karena menggunakan Unicode. Oleh karena itu, tambah range()untuk menambahkan lebih banyak karakter ke daftar.
map()memanggil chr()setiap iterasi range().

Benj
sumber
-7

Tidak, tidak ada, tetapi Anda dapat membuatnya dengan mudah:

    #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
sumber
11
Tiga tahun setelah jawaban yang diterima dengan jelas menyebutkan string.printable, Anda mengklaim "tidak, tidak ada"?
Tobias Kienzler