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.