我正在使用二进制设置读取文件:
with open(filename, 'rb') as f:
然后我将整个文件读入变量:
x = f.read()
我的问题是我想检查x中的字节是否为ascii可打印。所以我想比较字节,看看它们是否在十进制表示法中的32-128范围内。这样做最简单的方法是什么?
我玩过ord()函数,各种十六进制函数,因为我之前在项目的其他地方将字节转换为十六进制,但似乎没有任何工作。
我是python的新手,但有其他语言的经验。谁能指出我正确的方向?谢谢。
答案 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())