gpt4 book ai didi

python - 如何将Python字节字符串表示形式转换为字节?

转载 作者:行者123 更新时间:2023-12-02 01:26:26 24 4
gpt4 key购买 nike

我有许多 Python 字节对象存储在一个文本文件中,Python 会打印这些对象,如 "b'\x80\x03}q\x00.'" 如何将这些对象转换回来转换为字节对象?

换句话说,我正在尝试找到一个能够 convert("b'\x80\x03}q\x00.'") == b'\x80\x03}q\x00 的函数。 '

我觉得这应该是微不足道的,但这些明显的方法都不起作用:

>>> s = "b'\x80\x03}q\x00.'"
>>> bytes(s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: string argument without an encoding
>>> bytes(s.encode())
b"b'\xc2\x80\x03}q\x00.'"
>>> bytes(s[2:-1].encode())
b'\xc2\x80\x03}q\x00.'
>>> bytes(s[2:-1].encode('utf8'))
b'\xc2\x80\x03}q\x00.'
>>> eval(s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: source code string cannot contain null bytes
>>> exec(s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: source code string cannot contain null bytes

最佳答案

这并不真正适用于从文件读取 s 值的情况,但在您的示例中,常规字符串文字扩展了转义序列:

>>> s = "b'\x80\x03}q\x00.'"
>>> list(s)
['b', "'", '\x80', '\x03', '}', 'q', '\x00', '.', "'"]

请注意,s 不包含空字节的转义序列;它包含一个实际空字节。

您可以使用原始字符串文字来避免这种情况:

>>> s = r"b'\x80\x03}q\x00.'"
>>> list(s)
['b', "'", '\\', 'x', '8', '0', '\\', 'x', '0', '3', '}', 'q', '\\', 'x', '0', '0', '.', "'"]

在这种情况下,ast.literal_eval 就是您正在寻找的函数:

>>> ast.literal_eval(s)
b'\x80\x03}q\x00.'

原始字符串文字应该生成您从文件中读取的值:

import ast

b = b'\x80\x03}q\x00.'

with open("tmp.txt", "w") as f:
print(str(b), file=f)

with open("tmp.txt") as f:
s = f.readline().strip()

assert ast.literal_eval(s) == b

关于python - 如何将Python字节字符串表示形式转换为字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59777657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com