无法保存来自 API 的 Excel 响应

Cannot save Excel response from API

我正在 POST 请求 API returns 一个 Excel 文件。

当我在没有 Python 的情况下尝试该过程时 - 在 Postman 中 - 它工作正常:我看到乱码输出,但如果我单击保存响应并保存到文件,它会将文件保存为我可以正常打开的 xlsx 文件:

当我尝试在 Python 中执行相同操作时,我也可以打印(乱码)响应,但我无法将文件保存为可以打开的文件。

代码的第一部分(运行s 没有问题):

import requests
for i in range (1,3):
   url = "myurl"
   payload={}
   headers = {}
   response = requests.request("POST", url, headers=headers, data=payload)

现在是代码的关键部分。

如果我做 A:

    with open('C:\Users\mypath\exportdata.xlsx', "w") as o:
           o.write(response.text)
        print(response.text)

...然后当我 运行 代码时出现此错误:

  File "C:\Users\Username\AppData\Local\Programs\Python\Python310\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 10-11: character maps to <undefined>

如果我做B:

   with open('C:\Users\mypath\exportdata.xlsx', "w", encoding="utf-8") as o:
      o.write(response.text)
   print(response.text)

...然后代码 运行s 没有错误,但是当我打开文件时 excel 中出现 extension/format 错误。

如何使用 python 保存 excel 文件,以便之后可以正确打开和查看它?

这不是标准的 text/csv 到 excel 转换问题,您可以从乱码输出中看到 excel 文件的所有 XML 标志都在那里.

Excel 不是文本。 Excel 是二进制的。尝试 response.content:

with open(filename, "wb") as o:
  o.write(response.content)