Python main函数内循环拉取接口资源时数据覆盖问题求解
修复方案
存在的问题
Config_local中RES_EXT列表存在语法错误:- 第二个元素末尾缺失逗号
- 第三个元素的结尾单引号位置错误,会直接触发语法报错
- 主逻辑问题:
main()函数中仅在循环结束后处理请求结果,resource_alerts_response变量每次循环都会被新值覆盖,最终仅保留最后一次请求的结果 - 注释的
get_all_text函数逻辑错误:return语句写在循环内部,第一次循环执行后就会直接返回,无法遍历所有资源
修复步骤
1. 修复RES_EXT语法错误
RES_EXT = [ 'resource-alerts?count=500&start=1', 'resource-alerts?count=500&start=501', 'resource-alerts?count=500&start=1001', 'resource-alerts?count=500&start=1501' ]
2. 调整main函数逻辑,合并所有分页数据
修改思路为每次循环处理当前请求返回的数据,暂存到列表中,所有分页拉取完成后再合并为完整的DataFrame:
def main(): move_csv_files() session = requests.Session() session_id = get_session_id(session) # 初始化列表存储所有分页的DataFrame df_all = [] for res in RES_EXT: resource_alerts_response = get_resource_alerts_response(session, session_id, res) print(resource_alerts_response) # 处理当前分页数据并加入列表 df_single = resource_alerts_to_df(resource_alerts_response) df_all.append(df_single) # 合并所有分页数据,重置索引 df_total = pd.concat(df_all, ignore_index=True) print(df_total) send_email(df_total)
可选优化:避免重复写本地文件
当前resource_alerts_to_df会重复覆盖OUTFILE,如果不需要保留中间csv文件,可以直接从响应流读取数据,提升效率:
def resource_alerts_to_df(resource_alerts_response): return pd.read_csv(resource_alerts_response.raw)
内容的提问来源于stack exchange,提问作者user2023
相关产品推荐
相关产品推荐

