Python调用API写入文件仅保留首个结果,其余内容缺失求助
解决Python写入文件仅保留第一个API结果的问题
你的问题核心是文件打开模式错误或写入逻辑未覆盖所有循环内容,导致只有第一个API结果被保存。下面直接给出排查方案和修正代码:
常见错误场景及修复
推荐方案:先收集所有结果,一次性写入(高效且不易出错)
先把所有API返回结果存入列表,最后统一写入文件,避免重复打开文件带来的覆盖问题:
import csv import requests # 存储所有API返回结果 all_results = [] # 读取CSV输入文件 with open('input.csv', 'r', encoding='utf-8') as csv_f: csv_reader = csv.reader(csv_f) # 遍历每行输入数据 for row in csv_reader: # 假设CSV每行第一个元素是要传入API的数字 input_num = row[0] # 调用目标API(替换为你的实际API地址) res = requests.get(f"https://your-api-address.com/{input_num}") # 解析API返回的JSON结构(你提到返回是{}包裹的内容,直接用json()解析即可) api_result = res.json() print(api_result) # 将结果转为字符串存入列表 all_results.append(str(api_result)) # 一次性写入所有结果到文件 with open('output.txt', 'w', encoding='utf-8') as output_f: # 每个结果单独占一行 output_f.write('\n'.join(all_results))
备选方案:循环内用追加模式写入
如果不想提前收集结果,也可以在循环中用'a'(追加)模式打开文件,每次写入都会追加到文件末尾,不会覆盖之前的内容:
import csv import requests # 读取CSV输入文件 with open('input.csv', 'r', encoding='utf-8') as csv_f: csv_reader = csv.reader(csv_f) for row in csv_reader: input_num = row[0] res = requests.get(f"https://your-api-address.com/{input_num}") api_result = res.json() print(api_result) # 用'a'模式打开文件,追加写入当前结果 with open('output.txt', 'a', encoding='utf-8') as output_f: output_f.write(str(api_result) + '\n')
额外提示
- API调用可能出现网络错误、参数错误等问题,可添加异常捕获避免程序中断:
try: res = requests.get(f"https://your-api-address.com/{input_num}") res.raise_for_status() # 触发HTTP状态码错误的异常 api_result = res.json() except Exception as e: print(f"处理数字{input_num}时出错:{e}") all_results.append(f"Error: {input_num} - {str(e)}")
- 根据你的CSV实际格式调整读取逻辑,比如如果文件包含表头,需要先用
next(csv_reader)跳过表头行。
内容的提问来源于stack exchange,提问作者newtopython
相关产品推荐
相关产品推荐

