将字符串中的二进制数据写入二进制文件

Write binary data from a string to a binary file

我有一个 torrent 文件,通过使用 requests.get() 存储在一个字符串中并像这样获得:

import requests
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept-Charset': 'utf-8',
'Connection': 'keep-alive'}
request = requests.get(url, headers=headers)
data = requests.text

我想将其写入二进制文件,以便其中的数据正确且有效:

with open(name, "wb") as f:
    f.write(data)

但是我似乎无法将字符串写成纯二进制数据,因为 python 一直试图将其解释为 Unicode,但我收到如下错误:"UnicodeEncodeError: 'ascii' codec can't encode characters in position 3-9: ordinal not in range (128).

我尝试使用 bytearray 但出现了类似的问题:TypeError: unicode argument without an encoding.

有没有办法将字符串中的字节按原样写入文件?

  • 使用 response.content,而不是 response.text
  • 使用"wb"打开文件进行二进制输出。

示例程序:

import requests

r = requests.get("http://httpbin.org/image/png")
with open("image.png", "wb") as out_file:
    out_file.write(r.content)

一个稍微更高级的程序,对巨大的文件占用的内存空间更小:

import requests
import shutil

r = requests.get("http://httpbin.org/image/png", stream=True)
with open("image.png", "wb") as out_file:
    shutil.copyfileobj(r.raw, out_file)