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

从GET请求响应提取Zip内CSV并上传Google Sheets遇类型错误求助

问题解决:TypeError: a bytes-like object is required, not 'str'

错误原因

你代码里的report_url是字符串格式的下载链接,直接传给io.BytesIO()会报错——因为BytesIO需要的是zip文件的字节数据,不是URL地址本身。必须先通过这个链接发起请求,拿到实际的zip文件内容,再进行后续解压操作。

修复后的完整代码

import requests  # 新增:请求下载链接获取文件内容

response = wm.send_request(method, download_url, params=None, body=None, json=None, request_headers=None)
print(response)
report_url=response["downloadURL"]
print(report_url)


from google.colab import auth
auth.authenticate_user()

from gspread_dataframe import get_as_dataframe, set_with_dataframe
import gspread
import pandas as pd  # 新增:更安全处理CSV文件
import zipfile
import io
from google.auth import default
creds, _ = default()

gc = gspread.authorize(creds)


# 关键修改:先请求report_url获取zip文件字节内容
zip_response = requests.get(report_url)
# 用字节内容初始化BytesIO,再打开zip文件
z = zipfile.ZipFile(io.BytesIO(zip_response.content))

csv_filename = None
for filename in z.namelist():
    if filename.endswith(".csv"):
        csv_filename = filename
        break

if csv_filename is None:
    raise Exception("CSV file not found in zip archive")

# 用pandas读取CSV,避免手动拆分的错误(比如单元格含逗号)
with z.open(csv_filename) as f:
    df = pd.read_csv(f)

sheet = gc.open("Report").worksheet("Item_Performance")
# 用gspread_dataframe方法写入数据,高效可靠
set_with_dataframe(sheet, df)
print("Report uploaded to Google Sheets")

关键修改点

  • 新增requests库:向report_url发起GET请求,获取zip文件的字节数据(zip_response.content)
  • 替换io.BytesIO(report_url)为io.BytesIO(zip_response.content):用实际文件字节数据初始化BytesIO
  • 用pandas读取CSV:替代手动按行拆分的方式,避免CSV单元格含逗号时的拆分错误,同时写入Google Sheets更高效

内容的提问来源于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 16:39:21