Tüm ascii karakterlerinin bir listesini içeren bir Python Kitaplığı var mı?


100

Aşağıdaki gibi bir şey:

import ascii

print ascii.charlist()

Bu [A, B, C, D ...] gibi bir şey döndürür

Yanıtlar:


168

stringSabitleri istediğini olabilir. ( dokümanlar )

>>> içe aktarma dizesi
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

Tüm yazdırılabilir karakterleri istiyorsanız:

>>> string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ! "# $% & \' () * +, -. /:;? @ [\\] ^ _` {|} ~ \ t \ n \ r \ x0b \ x0c '

3
Ben biraz kafa karıştırıcı olduğunu düşünüyorum, ASCII uzakta değil ahiç zama 0 ila 127 kodlarından, yani sadece harfler değil.
Andrey

5
string.ascii_lettersbütün mesele!
jathanism

1
@jathanism - Ya da sadece string.letters... @Andrey'in bahsettiği şeye string.printabledaha yakın (ama aynı değil).
Joe Kington

Sanırım bu, OP'nin aslında her karaktere ihtiyaç duyup duymadığına bağlı. string.printabletüm yazdırılabilir karakterleri verir.
Acorn

Sorunun başlığı açıktır (ve tüm ASCII kümesine atıfta bulunur) ancak örneğin OP gerçekten harfleri istiyor gibi görünüyor.
Andrey

32

İşte burada:

[chr(i) for i in xrange(127)]

StringModülün kullanımdan kaldırıldığı göz önüne alındığında , bu en iyi yanıttır
Devon M

1
@ChuckFulminata, stringmodül kullanımdan kaldırılmadı. Bkz bu örneğin.
dkasak

@dkasak Harika teşekkürler, unuttum, stringmodül yalnızca kısmen kullanımdan kaldırıldı
Devon M

1
Python 3'te kaldırılıp yeniden adlandırıldığından range(127)beri aramanız gerektiğini de unutmayın . Ayrıca, Python 2'de Unicode karakterleri almak için , Python 3'ü aramanız gerekirrangexrangeunichr(i)chr(i)
Benj

1
0-127 için aralık (128) olmamalı mı?
Anadactothe

14

ASCII, bayt değerleri 0 ila 127 dahil 128 karakter tanımlar. Dolayısıyla, tüm ASCII karakterlerinin bir dizisini elde etmek için şunu yapabilirsiniz:

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

Bunlardan yalnızca bazıları yazdırılabilir, ancak yazdırılabilir ASCII karakterlerine Python'da şu yolla erişilebilir:

import string
string.printable

4

ASCII yazdırılabilir karakterler oldukça küçük bir liste olduğundan (32 ile 127 arasında değerlere sahip baytlar), ihtiyacınız olduğunda oluşturmak yeterince kolaydır:

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

Bunu dene!


ASCII olurdu range(0, 128).
dan04

@ dan04 @lucemia ASCII 0'dan 127'ye , genişletilmiş kodlar 255'e kadar
Andrey

3
@Andrey: ASCII 0 ile 127 arasındadır, bu nedenle Python'da (0, 128) aralığı. (Diğer yanıtlarda sık görülen bir hata ...)
jtniehof

2

Bunu bir modül olmadan yapabilirsiniz:

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

Yazın charactersve yazdırmalıdır ["a","b","c", ... ,"x","y","z"]. Büyük harf kullanımı için:

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

Bunun için herhangi bir aralık (aralık adımlarının kullanımı dahil) kullanılabilir, çünkü Unicode kullanır. Bu nedenle, range()listeye daha fazla karakter eklemek için artırın . her yinelemesini
map()çağırır .chr()range()


-8

Hayır yok, ama kolayca yapabilirsiniz:

    #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
Kabul edilen yanıtın açıkça belirtilmesinden üç yıl sonra ,string.printable "hayır, yok" mu diyorsunuz?
Tobias Kienzler
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.