Python如何遍历Excel全量行数据 逐行构造payload发送API请求
问题根源
代码仅发送最后一行数据,是因为构造请求参数、发起POST请求的代码没有放在for循环的缩进块内:循环执行过程中只会逐次覆盖name/categ/brd/des/titl几个变量的值,循环结束后变量留存的就是最后一行的取值,后续请求逻辑自然只会提交最后一条数据。
pandas读取Excel后遍历行不需要预先硬编码行数,本身就支持动态适配任意长度的表格数据。
修复方案
把构造payload、发送请求的逻辑全部缩进放到for循环内部即可,同时建议增加简单的异常捕获和状态打印,方便排查每行数据的发送情况,参考代码如下:
import pandas as pd import requests # 读取Excel,默认自动读取第一个工作表(即你的Sheet1),自动适配任意行数 my_table = pd.read_excel("Myexcel.xlsx") # 固定配置提前定义,不需要每次循环重复赋值 url = "替换为你的实际接口地址" headers = { # 替换为你的实际请求头参数 "Content-Type": "application/json" } # 逐行遍历,自动适配表格行数变化,无需手动指定行数 for idx, row in my_table.iterrows(): # 提取当前行对应字段,做格式转换 name = row["Name"] categ = str(int(row["CategoryId"])) brd = row["BrandName"] des = row["Description"] titl = row["Title"] # 构造当前行对应的请求参数 payload = { "Name": name, "CategoryId": categ, "BrandName": brd, "Description": des, "Title": titl } # 发起请求,加异常捕获避免单行报错中断整个任务 try: resp = requests.post(url, headers=headers, json=payload, timeout=10) resp_data = resp.json() print(f"第{idx+1}行发送成功,接口返回:{resp_data}") except Exception as e: print(f"第{idx+1}行发送失败,错误:{str(e)},对应数据:{payload}")
补充说明
- 如果
CategoryId列存在空值,直接转int会报错,可提前用my_table = my_table.dropna(subset=["CategoryId"])过滤无效行,或者在类型转换时增加单独的异常判断 - 如果接口有请求频率限制,可在循环内导入time模块后加
time.sleep(1)设置请求间隔,避免触发限流 - 给请求加
timeout参数可以避免单次请求无响应导致整个程序卡住
内容的提问来源于stack exchange,提问作者LaraF
相关产品推荐
相关产品推荐

