首页 > 解决方案 > python3 字节尽可能快地在文件末尾用 = 替换 %3D

问题描述

我有一个字节对象,它实际上是格式为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 字符。但是在发布请求中,我有%3D而不是=.

标签: pythonparsingurlliburldecode

解决方案


在我看来,您需要“取消引用” url 转义 ( %xx) 符号。

Python有一个功能,在python2.7中是urllib.unquote,在python3中是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')

推荐阅读