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

Python调用yfinance获取财经数据时如何从外部txt文件读取股票代码列表

问题产生原因

你修改后代码的核心错误是:通过fh.read()读取文件得到的是字符串类型数据,不是yf.download()要求的列表类型参数。
你tickers.txt里写的["aapl", "goog", "amzn", "BAC", "BA"]看起来是Python列表语法,但读取后只是普通的文本字符串,无法被yfinance识别为多股票代码列表,因此触发报错。
另外额外的不规范点:你直接用open()打开文件后没有主动关闭,会存在文件句柄泄漏的风险。

解决方法

方案1:调整txt文件格式,逐行读取股票代码(更推荐,配置更简单,无语法兼容问题)

  1. 先修改tickers.txt内容,每行放一个股票代码,去掉列表相关的符号:
aapl
goog
amzn
BAC
BA
  1. 修改Python代码,用with open(自动管理文件关闭)逐行读取内容,生成符合要求的代码列表:
import yfinance as yf

with open("tickers.txt", "r", encoding="utf-8") as fh:
    # 逐行读取,去掉每行首尾的空白符、换行符,过滤空行
    tickers_list = [line.strip() for line in fh if line.strip()]

data = yf.download(tickers_list, start="2017-01-01", end="2017-04-30")
print(data['Adj Close'])

方案2:保留当前txt格式,将读取的字符串转为Python列表

如果不想修改现有tickers.txt的内容,可以用Python标准库ast的literal_eval方法,安全地将符合Python语法的字符串转为对应的列表对象:

import yfinance as yf
import ast

with open("tickers.txt", "r", encoding="utf-8") as fh:
    content = fh.read()
# 将字符串转成列表
tickers_list = ast.literal_eval(content)

data = yf.download(tickers_list, start="2017-01-01", end="2017-04-30")
print(data['Adj Close'])

注意:不要用eval()做转换,eval()会执行字符串内的任意代码,存在安全风险,ast.literal_eval只会转换Python字面量结构,安全性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:42:03