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')
我有一个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')