检查一个字节是否为ascii可打印

时间:2017-02-06 09:20:25

标签: python

我正在使用二进制设置读取文件:

with open(filename, 'rb') as f:

然后我将整个文件读入变量:

x = f.read()

我的问题是我想检查x中的字节是否为ascii可打印。所以我想比较字节,看看它们是否在十进制表示法中的32-128范围内。这样做最简单的方法是什么?

我玩过ord()函数,各种十六进制函数,因为我之前在项目的其他地方将字节转换为十六进制,但似乎没有任何工作。

我是python的新手,但有其他语言的经验。谁能指出我正确的方向?谢谢。

1 个答案:

答案 0 :(得分:1)

您可以针对string.printable检查每个字节。

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

printable_chars = bytes(string.printable, 'ascii')
with open(filename, 'rb') as f:
    printable = all(char in printable_chars for char in f.read())

为了提高效率,对于集合vs字符串查找,O(1)vs O(n),使用集合:

printable_chars = set(bytes(string.printable, 'ascii'))
with open(filename, 'rb') as f:
    printable = all(char in printable_chars for char in f.read())