You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法从API响应提取压缩CSV并上传至Google Sheets的解决方法

问题分析与解决方案

错误AttributeError: 'str' object has no attribute 'content'的原因很明确:report_url是从接口返回的字符串格式的下载链接,不是HTTP响应对象,自然没有.content属性。你需要先通过这个链接下载ZIP文件的二进制数据,再进行后续处理。

下面是修正后的完整代码,附带关键步骤说明:

修正后的代码

from google.colab import auth        
from gspread_dataframe import set_with_dataframe
import gspread
import zipfile
import io
import requests
import pandas as pd
from google.auth import default

# 认证Google Sheets
auth.authenticate_user()
creds, _ = default()
gc = gspread.authorize(creds)

# 从Walmart接口获取下载链接
response = wm.send_request(method, download_url, params=None, body=None, json=None, request_headers=None)
report_url = response["downloadURL"]

# 关键修正:通过requests下载ZIP文件的二进制内容
zip_response = requests.get(report_url)
# 确保请求成功,下载失败时直接抛出错误
zip_response.raise_for_status()

# 读取ZIP文件并提取内部CSV
with zipfile.ZipFile(io.BytesIO(zip_response.content)) as file_zip:
    # 取ZIP内第一个CSV文件(假设压缩包内仅包含目标CSV)
    csv_filename = file_zip.namelist()[0]
    with file_zip.open(csv_filename) as file_csv:
        # 用pandas读取CSV为DataFrame,简化后续上传操作
        df = pd.read_csv(file_csv)

# 上传到Google Sheets
sheet = gc.open("Report").worksheet("Item_Performance")
sheet.clear()
# 使用set_with_dataframe高效上传,自动适配表头与数据格式
set_with_dataframe(sheet, df)

print("Report uploaded to Google Sheets")

关键修改点

  • 新增requests库用于下载文件,pandas库用于便捷处理CSV数据(如果Colab未预装,先运行!pip install requests pandas)
  • 用requests.get(report_url)获取ZIP文件的二进制响应,通过zip_response.content拿到可处理的二进制数据
  • 改用pandas.read_csv读取CSV并转为DataFrame,配合set_with_dataframe上传,比原生csv.reader更稳定,还能自动处理表头、数据类型等细节
  • 增加zip_response.raise_for_status(),下载失败时直接抛出错误,便于快速排查问题

内容的提问来源于stack exchange,提问作者sandibaeva52

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 17:16:29