Có Thư viện Python nào chứa danh sách tất cả các ký tự ascii không?


98

Một cái gì đó như dưới đây:

import ascii

print ascii.charlist()

Điều này sẽ trả về một cái gì đó như [A, B, C, D ...]

Câu trả lời:


162

Các stringhằng số có thể là những gì bạn muốn. ( tài liệu )

>>> nhập chuỗi
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

Nếu bạn muốn tất cả các ký tự có thể in được:

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

3
Tôi nghĩ rằng nó hơi khó hiểu, ASCII không phải là mã từ ađến zmà từ 0 đến 127, đó không chỉ là các chữ cái.
Andrey

4
string.ascii_letterslà toàn bộ shebang!
jathanism

1
@jathanism - Hoặc chỉ là string.letters... string.printablegần hơn (nhưng không giống) với những gì @Andrey đề cập đến.
Joe Kington

Tôi cho rằng nó phụ thuộc vào việc OP có thực sự cần từng ký tự đơn lẻ hay không. string.printablecung cấp cho tất cả các ký tự có thể in được.
Acorn

Tiêu đề của câu hỏi rõ ràng (và nó đề cập đến toàn bộ tập hợp ASCII) nhưng trong ví dụ, có vẻ như OP thực sự muốn các chữ cái.
Andrey

32

Nó đây:

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

Cho rằng các Stringmô-đun bị phản đối, đây là câu trả lời tốt nhất
Devon M

@ChuckFulminata, stringmô-đun không bị phản đối. Hãy xem điều này , chẳng hạn.
dkasak

@dkasak Cảm ơn rất nhiều, tôi quên mất, stringmô-đun này chỉ không được chấp nhận một phần
Devon M

1
Ngoài ra, hãy nhớ rằng trong Python 3, bạn nên gọi range(127), vì rangeđã bị xóa và xrangeđặt lại tên. Ngoài ra, để nhận các ký tự Unicode trong Python 2, bạn nên gọi unichr(i)nhưng đơn giản là trong Python 3chr(i)
Benj

1
Nó không phải là phạm vi (128) cho 0-127?
Anadactothe

14

ASCII định nghĩa 128 ký tự có giá trị byte từ 0 đến 127 bao gồm. Vì vậy, để có được một chuỗi tất cả các ký tự ASCII, bạn chỉ cần làm

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

Tuy nhiên, chỉ một số trong số đó có thể in được - các ký tự ASCII in được có thể được truy cập bằng Python thông qua

import string
string.printable

4

Vì các ký tự có thể in ASCII là một danh sách khá nhỏ (byte có giá trị từ 32 đến 127), nó đủ dễ dàng để tạo khi bạn cần:

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

Thử cái này!


ASCII sẽ là range(0, 128).
dan04,

@ dan04 @lucemia ASCII từ 0 đến 127 , mã mở rộng lên tới 255
Andrey

3
@Andrey: ASCII là từ 0 đến 127, vì vậy phạm vi (0, 128) trong Python. (Một lỗi thường gặp trong một số câu trả lời khác ...)
jtniehof

1

Bạn có thể làm điều này mà không cần mô-đun:

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

Nhập charactersvà nó sẽ in ["a","b","c", ... ,"x","y","z"]. Để sử dụng chữ hoa:

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

Bất kỳ phạm vi nào (bao gồm cả việc sử dụng các bước phạm vi) đều có thể được sử dụng cho việc này, vì nó sử dụng Unicode. Do đó, hãy tăng range()thêm để thêm nhiều ký tự vào danh sách.
map()gọi chr()mỗi lần lặp lại range().


-7

Không, không có, nhưng bạn có thể dễ dàng tạo một:

    #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
Ba năm sau khi câu trả lời được chấp nhận đề cập rõ ràng string.printable, bạn khẳng định "không, không có"?
Tobias Kienzler
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.