python - 检查一个字节是否可以 ascii 打印

标签 python

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

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/

相关文章:

当文件明确存在时,Python 文件未找到错误

python - 使用 pyparsing 解析嵌套结构

python - bash 脚本中的 pip -r 错误

python - pyspark.ml.classification.DecisionTreeClassificationModel 中的 pyspark.mllib.tree.DecisionTreeModel.toDebugString() 的等效项 - 在 PYTHON 中

python - 加载预先计算的向量 Gensim

python - TensorFlow 数据集 .map() 方法不适用于内置 tf.keras.preprocessing.image 函数

python - 从循环 DNS 记录中获取单个主机名

python - 当我附加时,Numpy 错误地将大 float 更改为非常小的数字

python - __getitem__ 空元组参数

python - 将嵌套列表分成具有不相交元素的组