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
相关产品推荐
相关产品推荐

