Python遍历股票符号列表调用API请求历史数据问题求助
解决股票代码循环遍历问题
你的脚本仅处理第一个股票符号,通常是以下几个原因导致的:
- 读取文件时未正确获取所有行(比如用了
read()而不是readlines(),或者没有去除每行的换行符/空白字符) - 循环内部存在提前终止的逻辑(比如
return语句、未捕获的异常导致循环中断) - API调用失败后未处理错误,直接终止了后续执行
下面是修复后的完整示例脚本,包含正确的文件读取、循环遍历、API调用和错误处理:
import pandas as pd import requests # 替换为你的TwelveData API密钥 API_KEY = "your_api_key_here" BASE_URL = "https://api.twelvedata.com/time_series" # 读取股票代码文件,处理每行的空白字符 with open("testsymbol.txt", "r") as f: symbols = [line.strip() for line in f if line.strip()] # 过滤空行并去除换行符 # 遍历每个股票代码 for symbol in symbols: try: # 构造API请求参数 params = { "symbol": symbol, "interval": "1day", # 根据需求调整时间间隔 "apikey": API_KEY, "outputsize": "30" # 获取最近30条数据,可按需修改 } # 发送API请求 response = requests.get(BASE_URL, params=params) response.raise_for_status() # 检查请求是否成功 # 解析响应数据为DataFrame data = response.json() if "values" not in data: print(f"未获取到{symbol}的数据") continue df = pd.DataFrame(data["values"]) # 调整列顺序(可选,根据API返回结构调整) df = df[["datetime", "open", "high", "low", "close", "volume"]] # 保存为CSV文件,文件名包含股票代码 csv_filename = f"{symbol}_historical_data.csv" df.to_csv(csv_filename, index=False) print(f"{symbol}的数据已成功保存到{csv_filename}") except Exception as e: print(f"处理{symbol}时出错: {str(e)}") continue # 出错后继续处理下一个股票代码
关键修复点说明:
- 文件读取:使用列表推导式读取所有行,
strip()去除每行的换行符和首尾空白,同时过滤空行,确保每个元素都是有效的股票代码。 - 循环逻辑:使用
for symbol in symbols遍历所有代码,没有提前终止的语句。 - 错误处理:包裹
try-except块,即使某个股票代码处理失败,也会继续执行后续代码,不会中断整个循环。 - API响应检查:添加
response.raise_for_status()捕获HTTP请求错误,同时检查响应中是否包含values字段,避免因API返回异常导致的DataFrame构造失败。
内容的提问来源于stack exchange,提问作者Chester205
相关产品推荐
相关产品推荐

