将 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'