我正在使用二进制设置读取文件:
with open(filename, 'rb') as f:
然后我将整个文件读入变量:
x = f.read()
我的问题是我想检查 x 中的字节是否可 ascii 打印。所以我想比较字节,看看它们是否在十进制表示的 32-128 范围内。执行此操作最简单的方法是什么?
自从我之前在项目的其他地方将字节转换为十六进制以来,我一直在尝试使用 ord() 函数和各种十六进制函数,但似乎没有任何效果。
我是Python新手,但有其他语言的经验。有人能指出我正确的方向吗?谢谢。
最佳答案
您可以根据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())
为了提高效率,集合与字符串查找的 O(1) 与 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())
关于python - 检查一个字节是否可以 ascii 打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42064158/