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

Python循环内更新变量及API数据分批写入文件方案问询

修正后的实现方案

原代码存在核心逻辑错误,包括循环终止条件、数据拼接、文件操作、offset递增等问题,以下是符合需求的完整实现:

import requests

offset = 0
current_file_num = 1
batch_records = []
# 每个文件覆盖500的offset跨度,每次offset+10,对应50条请求
max_batch_count = 500 // 10

while True:
    # 构造请求URL
    url = f"test.api?offset={offset}"
    try:
        response = requests.get(url)
        response.raise_for_status()  # 捕获HTTP请求错误
        raw_data = response.text
        
        # 判断API是否返回空数据(需根据实际返回格式调整,比如空数组、空字符串)
        if not raw_data.strip():
            # 写入剩余未保存的数据
            if batch_records:
                with open(f"file{current_file_num}.txt", "w", encoding="utf-8") as f:
                    f.write("\n".join(batch_records))
            break
        
        # 累加当前请求的数据
        batch_records.append(raw_data)
        
        # 检查是否达到当前文件的存储上限,或即将进入下一个500 offset区间
        if len(batch_records) >= max_batch_count or (offset + 10) // 500 > offset // 500:
            # 写入当前文件
            with open(f"file{current_file_num}.txt", "w", encoding="utf-8") as f:
                f.write("\n".join(batch_records))
            # 重置批次数据,切换到下一个文件
            batch_records = []
            current_file_num += 1
        
        # 递增offset获取下一批数据
        offset += 10
    except requests.exceptions.RequestException as e:
        print(f"请求失败: {e}")
        break

关键逻辑说明

  • 循环终止:通过not raw_data.strip()判断API返回内容为空时停止循环,若API返回空数据格式为[]等,需修改该判断逻辑
  • 文件拆分:每个文件对应500的offset跨度(50次请求),当批次数据满50条,或offset即将进入下一个500区间时,写入文件并切换到下一个文件
  • 数据存储:用列表存储批次数据,避免频繁字符串拼接的性能损耗,写入时统一合并
  • 资源管理:使用with语句自动处理文件关闭,避免资源泄漏;指定utf-8编码防止乱码
  • 异常处理:捕获请求异常,避免程序因网络问题意外崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:30:41