python3 字节尽快用文件末尾的 = 替换 %3D

python3 bytes replace %3D by = in the end of file as fast as it possible

我有一个bytes对象,它实际上是dataurl格式的文件。大约 500 KB。

我需要删除37字节的文件头(我是用切片做的)并在文件末尾用=替换%3D(这个序列可以找到0-2次).

Urllib.parse 更改对象中的所有条目。

有没有漂亮的方法来处理这个对象?

    content_length = int(self.headers['Content-Length']) # <--- Gets the size of data
    post_body = self.rfile.read(content_length) # <--- Gets the data itself
    print(len(post_body))
    with open("1111", "wb") as fd:
        fd.write(post_body)

    post_body = post_body[37:len(post_body)]

    with open("decoded.png", "wb") as fh:
        fh.write(base64.decodebytes(post_body))

在最后一行,我遇到了问题。

可能会添加

= 个字符以使最后一个块包含四个 base64 字符。但是在 post 请求中,我有 %3D 而不是 =.

在我看来,您需要 "unquote" url 转义 (%xx) 符号。

Python 有一个功能,在 python2.7 中是 urllib.unquote, in python3 it is urllib.parse.unquote。示例用法为:

from urllib.parse import unquote

post_body = unquote(post_body[37:])
  # my_list[i:] is short for my_list[i:len(my_list)]

但是,我不知道您是否只想将它应用于最后一个字节,或者仅在字节以 %3D 结尾时应用...您可以使用 .endswith() 对字符串和字节同样有效:

my_bytes.endswith('%3D')