มี Python Library ที่มีรายการอักขระ ascii ทั้งหมดหรือไม่?


คำตอบ:


168

stringคงอาจจะเป็นสิ่งที่คุณต้องการ ( เอกสาร )

>>> สตริงนำเข้า
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

หากคุณต้องการอักขระที่พิมพ์ได้ทั้งหมด:

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

3
ฉันคิดว่ามันค่อนข้างสับสนเล็กน้อย ASCII ไม่ใช่จากaถึงถึงzแต่จาก 0 ถึง 127 รหัสนั่นไม่ใช่แค่ตัวอักษรเท่านั้น
Andrey

5
string.ascii_lettersเป็น Shebang ทั้งหมด!
jathanism

1
@jathanism - หรือแค่string.letters... string.printableใกล้ชิด (แต่ไม่เหมือนกัน) กับสิ่งที่ @Andrey อ้างถึงแม้ว่า
Joe Kington

ฉันคิดว่ามันขึ้นอยู่กับว่า OP ต้องการตัวละครทุกตัวจริงหรือไม่ string.printableให้อักขระที่พิมพ์ได้ทั้งหมด
Acorn

ชื่อคำถามชัดเจน (และหมายถึงชุด ASCII ทั้งหมด) แต่ในตัวอย่างดูเหมือนว่า OP ต้องการตัวอักษรจริงๆ
Andrey

32

นี่คือ:

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

เนื่องจากStringโมดูลเลิกใช้งานแล้วนี่คือคำตอบที่ดีที่สุด
Devon M

1
@ChuckFulminata stringโมดูลนี้ไม่ได้เลิกใช้งาน ดูสิ่งนี้เช่น
dkasak

@dkasak ขอบคุณมากฉันลืมไปแล้วstringโมดูลนี้เลิกใช้งานไปแล้วบางส่วนเท่านั้น
Devon M

1
โปรดจำไว้ว่าใน Python 3 คุณควรเรียกใช้range(127)เนื่องจากrangeถูกลบออกและxrangeตั้งชื่อใหม่ นอกจากนี้ยังจะได้รับตัวอักษร Unicode ในหลาม 2 คุณควรจะเรียกunichr(i)แต่ในหลาม 3 เพียงchr(i)
Benj

1
ไม่ควรเป็นช่วง (128) สำหรับ 0-127?
Anadactothe

14

ASCII กำหนดอักขระ 128 ตัวที่มีค่าไบต์ตั้งแต่ 0 ถึง 127 รวม เพื่อให้ได้สตริงของอักขระ ASCII ทั้งหมดคุณสามารถทำได้

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

มีเพียงบางส่วนเท่านั้นที่สามารถพิมพ์ได้อย่างไรก็ตาม - อักขระ ASCII ที่พิมพ์ได้สามารถเข้าถึงได้ใน Python ผ่านทาง

import string
string.printable

4

เนื่องจากอักขระที่พิมพ์ได้ ASCII เป็นรายการที่ค่อนข้างเล็ก (ไบต์ที่มีค่าระหว่าง 32 ถึง 127) จึงง่ายพอที่จะสร้างเมื่อคุณต้องการ:

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

ลองดูสิ!


ASCII range(0, 128)จะเป็น
dan04

@ dan04 @lucemia ASCII จาก 0 ถึง127รหัสขยายได้ถึง 255
Andrey

3
@Andrey: ASCII อยู่ระหว่าง 0 ถึง 127 ดังนั้นช่วง (0, 128) ใน Python (ข้อผิดพลาดทั่วไปในคำตอบอื่น ๆ ... )
jtniehof

2

คุณสามารถทำได้โดยไม่ต้องใช้โมดูล:

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

พิมพ์และมันควรจะพิมพ์characters ["a","b","c", ... ,"x","y","z"]สำหรับการใช้ตัวพิมพ์ใหญ่:

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

สามารถใช้ช่วงใดก็ได้ (รวมถึงการใช้ขั้นตอนช่วง) เนื่องจากใช้ Unicode ดังนั้นให้เพิ่มrange()เพื่อเพิ่มอักขระเพิ่มเติมในรายการ
map()เรียกchr()ทุกการทำซ้ำของไฟล์range().


-8

ไม่ไม่มี แต่คุณสามารถสร้างได้อย่างง่ายดาย:

    #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
สามปีหลังจากคำตอบที่ได้รับการยอมรับกล่าวถึงอย่างชัดเจนstring.printableคุณอ้างว่า "ไม่ไม่มี"?
Tobias Kienzler
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.