gpt4 book ai didi

Python:将原始字符串转换为字节字符串而不添加转义字符

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

我有一个字符串:

'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084'

我想要:

b'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084'

但我不断得到:

b'BZh91AY&SYA\\xaf\\x82\\r\\x00\\x00\\x01\\x01\\x80\\x02\\xc0\\x02\\x00 \\x00!\\x9ah3M\\x07<]\\xc9\\x14\\xe1BA\\x06\\xbe\\x084'

上下文

我从网页上抓取了一个字符串并将其存储在变量 un 中。现在我想使用 BZip2 解压缩它:

bz2.decompress(un)

但是,由于 un 是一个 str 对象,因此我收到此错误:

TypeError: a bytes-like object is required, not 'str'

因此,我需要将 un 转换为类似字节的对象,而不将单个反斜杠更改为转义反斜杠。

编辑 1:感谢您的所有帮助!@wim我现在明白你的意思了,但是我不知道如何从我的网络抓取方法中检索类似字节的对象:

r = requests.get('http://www.pythonchallenge.com/pc/def/integrity.html')

doc = html.fromstring(r.content)
comment = doc.xpath('//comment()')[0].text.split('\n')[1:3]

pattern = re.compile("[a-z]{2}: '(.+)'")

un = re.search(pattern, comment[0]).group(1)

我使用的包是 requestslxml.htmlrebz2

我的目标是使用 bz2 解压缩 un,但我很难从网络抓取过程中获取类似字节的对象。

有什么指点吗?

最佳答案

您的错误较早存在。唯一可接受的解决方案是更改抓取代码,使其返回字节对象而不是文本对象。不要尝试将字符串“转换”为字节,这无法可靠地完成。

不要不要这样做:

>>> un = 'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084'
>>> bz2.decompress(un.encode('raw_unicode_escape'))
b'huge'

“raw_unicode_escape”只是一种 Latin-1 编码,它具有针对其之外的字符的内置后备。此编码使用\uXXXX 和\UXXXXXXXXX 作为其他代码点。现有的反斜杠不会以任何方式转义。它用于 Python pickle 协议(protocol)。 对于无法表示为\xXX 序列的 Unicode 字符,您的数据将被损坏。

网络抓取代码没有必要将 bz2 编码的字节作为 str 返回,因此您需要解决问题的原因,而不是尝试处理症状。

关于Python:将原始字符串转换为字节字符串而不添加转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51457418/

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