python - 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
而不是=
.
解决方案
在我看来,您需要“取消引用” 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')
推荐阅读
- r - 如何在 R 中的小标题中添加小标题?
- flutter - Flutter 动态文本字段自动完成
- angular - 是否需要 node_modules 和 package.json 才能以角度运行 dist 文件夹
- python - 我的代码重复了很多相同的功能,但它有很多不同的变量,有没有办法让它更短?
- data-structures - 是否有可用的严格斐波那契堆实现?
- python - Scipy 错误(ImportError:DLL 加载失败)
- c# - CloudWatch 中未收到 AWS SNS 传送状态
- c# - 以元组为值从 Dictionary 类继承
- mysql - 选择各行中的最大值并合并
- php - 使用异步承诺处理 Guzzle 超时