【发布时间】:2020-11-01 16:31:06
【问题描述】:
背景: 我在 python 2.7 中使用 request.get ,然后保存请求内容,无论是二进制还是文本。 改成python 3.7后,需要使用请求文本来保存文本。不幸的是,我也使用请求文本保存了二进制文件(jpg 文件)。
我研究过这个:stackoverflow中的“'content'和'text'有什么区别”。有没有办法让我将请求文本从文件转换为内容(或二进制 jpg 格式)?
只是读取文件并处理成二进制,失败了。
我的方法是:
html = requests.get(url, headers={"User-Agent":self.user_agents[agent]})
html.encoding = html.apparent_encoding
with open(fname, "w") as fh:
fh.write(html.text)
fh.close()
非常感谢
补充:html.text 已经保存到文件中。问题是如何将文件(不是request.get)转换或解码回二进制文件。
【问题讨论】:
-
你需要做例如
jpg_bytes = requests.get('http://example.com/image.jpg').content适用于任何二进制数据 -.text仅适用于人类可读的文本。 -
您使用的是
with,因此无需在文件句柄上调用close。 -
@metatoaster,对不起我不清楚的问题。我现在可以保存二进制内容,但之前的文件使用的是 .text 人类可读的文本。如何将文本格式转换(解码)为二进制?
-
只需打开您使用二进制模式保存的原始文件,如答案所示,将返回
bytes。否则在不使用二进制模式的情况下打开它,read方法会尝试将默认编解码器转换为str,如果读取的内容被正确解码,则该方法将成功。 -
@andrea-blengino,感谢您格式化代码