将 python 字节数据字符串转换为字节
convert python string of byte data to bytes
我有一个 Python 字节数据串。示例字符串如下所示:
string = "b'\xabVJ-K\xcd+Q\xb2R*.M*N.\xcaLJU\xd2QJ\xceH\xcc\xcbK\xcd\x01\x89\x16\xe4\x97\xe8\x97d&g\xa7\x16Y\x85\x06\xbb8\xeb\x02\t\xa5Z\x00'"
是字符串,不是bytes
。我希望将其转换为字节。正常方法(如 encode
)会产生这样的结果:
b'\xabVJ-K\xcd+Q\xb2R*.M*N.\xcaLJU\xd2QJ\xceH\xcc\xcbK\xcd\x01\x89\x16\xe4\x97\xe8\x97d&g\xa7\x16Y\x85\x06\xbb8\xeb\x02\t\xa5Z\x00'
这会导致问题(请注意添加了所有额外的斜杠)。
我已经在 SO 上浏览了 10 多个对这个问题的潜在答案,但只有一个有效,而且它是我不想使用的解决方案,原因很明显:
this_works = eval(string)
有什么方法可以在不使用 eval 的情况下运行它吗?我尝试过的其他可能的解决方案都失败了:
Option 1
我假设您在变量 s
:
中有类似 python 的字符串表示
s = r"b'\xabVJ-K\xcd+Q\xb2R*.M*N.\xcaLJU\xd2QJ\xceH\xcc\xcbK\xcd\x01\x89\x16\xe4\x97\xe8\x97d&g\xa7\x16Y\x85\x06\xbb8\xeb\x02\t\xa5Z\x00'"
是的,如果你评估这个然后你得到真正的 python bytes
对象。
但是你可以尝试用 ast
module:
解析它
import ast
s = r"b'\xabVJ-K\xcd+Q\xb2R*.M*N.\xcaLJU\xd2QJ\xceH\xcc\xcbK\xcd\x01\x89\x16\xe4\x97\xe8\x97d&g\xa7\x16Y\x85\x06\xbb8\xeb\x02\t\xa5Z\x00'"
tree = ast.parse(s)
value = tree.body[0].value.value
print(type(value), value)
这将输出您的 bytes
对象:
<class 'bytes'> b'\xabVJ-K\xcd+Q\xb2R*.M*N.\xcaLJU\xd2QJ\xceH\xcc\xcbK\xcd\x01\x89\x16\xe4\x97\xe8\x97d&g\xa7\x16Y\x85\x06\xbb8\xeb\x02\t\xa5Z\x00'
我有一个 Python 字节数据串。示例字符串如下所示:
string = "b'\xabVJ-K\xcd+Q\xb2R*.M*N.\xcaLJU\xd2QJ\xceH\xcc\xcbK\xcd\x01\x89\x16\xe4\x97\xe8\x97d&g\xa7\x16Y\x85\x06\xbb8\xeb\x02\t\xa5Z\x00'"
是字符串,不是bytes
。我希望将其转换为字节。正常方法(如 encode
)会产生这样的结果:
b'\xabVJ-K\xcd+Q\xb2R*.M*N.\xcaLJU\xd2QJ\xceH\xcc\xcbK\xcd\x01\x89\x16\xe4\x97\xe8\x97d&g\xa7\x16Y\x85\x06\xbb8\xeb\x02\t\xa5Z\x00'
这会导致问题(请注意添加了所有额外的斜杠)。
我已经在 SO 上浏览了 10 多个对这个问题的潜在答案,但只有一个有效,而且它是我不想使用的解决方案,原因很明显:
this_works = eval(string)
有什么方法可以在不使用 eval 的情况下运行它吗?我尝试过的其他可能的解决方案都失败了:
Option 1
我假设您在变量 s
:
s = r"b'\xabVJ-K\xcd+Q\xb2R*.M*N.\xcaLJU\xd2QJ\xceH\xcc\xcbK\xcd\x01\x89\x16\xe4\x97\xe8\x97d&g\xa7\x16Y\x85\x06\xbb8\xeb\x02\t\xa5Z\x00'"
是的,如果你评估这个然后你得到真正的 python bytes
对象。
但是你可以尝试用 ast
module:
import ast
s = r"b'\xabVJ-K\xcd+Q\xb2R*.M*N.\xcaLJU\xd2QJ\xceH\xcc\xcbK\xcd\x01\x89\x16\xe4\x97\xe8\x97d&g\xa7\x16Y\x85\x06\xbb8\xeb\x02\t\xa5Z\x00'"
tree = ast.parse(s)
value = tree.body[0].value.value
print(type(value), value)
这将输出您的 bytes
对象:
<class 'bytes'> b'\xabVJ-K\xcd+Q\xb2R*.M*N.\xcaLJU\xd2QJ\xceH\xcc\xcbK\xcd\x01\x89\x16\xe4\x97\xe8\x97d&g\xa7\x16Y\x85\x06\xbb8\xeb\x02\t\xa5Z\x00'