有没有包含所有ascii字符列表的Python库?


98

如下所示:

import ascii

print ascii.charlist()

会返回类似[A,B,C,D ...]的内容

Answers:


162

string常数可能是你想要的东西。(docs

>>>导入字符串
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

如果要所有可打印字符:

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

3
我认为这有点令人困惑,ASCII不是从az而是从0到127个代码,不仅是字母。
安德烈

4
string.ascii_letters是整个shebang!
詹森主义2011年

1
@jathanism-或只是string.letters…… string.printable与@Andrey所指的更接近(但不相同)。
乔·肯顿

我想这取决于OP是否实际需要每个字符。string.printable给出所有可打印的字符。
橡子

这个问题的标题很清楚(它指的是整个ASCII集),但在示例中,它看起来像OP确实想要字母。
安德烈

32

这里是:

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

鉴于该String模块已弃用,这是最佳答案
Devon M

@ChuckFulminata,string不建议使用该模块。例如,参见this
dkasak '16

@dkasak酷,谢谢,我忘了,该string模块仅被部分弃用
Devon M

1
还要记住,在Python 3中您应该调用range(127),因为它range已被删除并xrange重新命名。另外,要在Python 2中获取Unicode字符,您应该调用,unichr(i)但只需在Python 3中即可chr(i)
-Benj

1
它不应该是0-127的范围(128)吗?
阿纳达克索斯

14

ASCII定义128个字符,其字节值范围从0到127(包括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'5

@ dan04 @lucemia ASCII从0到127,扩展代码最大为255
Andrey

3
@Andrey:ASCII是从0到127,因此在Python中是range(0,128)。(其他几个答案中的一个常见错误...)
jtniehof 2011年

1

您可以在没有模块的情况下执行此操作:

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


-7

不,没有,但是您可以轻松地制作一个:

    #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 2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.