Python导入sp500_stocks.csv遇FileNotFoundError问题求助
文件找不到问题的排查与解决
一、先解决sp500_stocks.csv找不到的问题
1. 绝对路径验证
- 把路径里的
(taking out name for privacy)替换成你的真实用户名,比如C:/Users/John/Desktop/starter_files/sp500_stocks.csv - 直接从文件资源管理器复制该文件的完整路径:右键文件→属性→安全→对象名称,复制后把反斜杠
\换成正斜杠/,或者保留反斜杠但加双反斜杠\\,或者用r前缀(你已经用了r,但要确保路径完全匹配)
2. 检查当前工作目录
在代码开头加一行,确认Python的工作路径:
import os print(os.getcwd())
如果相对路径sp500_stocks.csv的位置不是这个输出的目录,要么把文件移到该目录,要么用正确的相对路径(比如./Desktop/starter_files/sp500_stocks.csv,根据实际层级调整)
3. 确认文件存在性
用代码直接检查路径是否有效:
import os file_path = r'C:/Users/真实用户名/Desktop/starter_files/sp500_stocks.csv' print(os.path.exists(file_path))
如果输出False,说明:
- 路径拼写错误
- 文件被删除/移动了
- 文件名有拼写错误(比如大小写、多空格、后缀名不对)
4. 权限排查
如果文件在系统保护目录(比如Program Files),右键Python脚本→以管理员身份运行,再试一次。
二、跳过本地文件,直接用API获取标普500成分股
如果本地文件始终搞不定,直接通过API获取成分股列表更高效,也避免文件依赖:
示例代码(用yahoo_fin库)
from yahoo_fin import stock_info as si import pandas as pd # 获取标普500所有成分股代码 sp500_tickers = si.tickers_sp500() # 批量获取单只股票的最新数据(以苹果为例) aapl_data = si.get_data('aapl') # 获取最新股价 latest_price = aapl_data['close'].iloc[-1] # 批量遍历所有成分股,按需收集数据 stock_data = [] for ticker in sp500_tickers[:10]: # 先测试前10只,避免请求过多被限制 try: data = si.get_data(ticker) stock_info = { 'ticker': ticker, 'latest_price': data['close'].iloc[-1], 'market_cap': si.get_quote_table(ticker)['Market Cap'] } stock_data.append(stock_info) except Exception as e: print(f"获取{ticker}数据失败: {e}") df = pd.DataFrame(stock_data)
三、计算自定义加权投资组合的购买数量
- 确定权重规则:比如等权重(每只股票占比相同)、市值加权(按市值占比分摊),或者自定义基本面权重(比如市盈率、市净率)
- 设定总投资金额:比如
total_investment = 10000 - 计算每只股票的分配金额和购买数量:
# 示例:等权重分配 total_stocks = len(df) weight_per_stock = 1 / total_stocks df['allocated_amount'] = total_investment * weight_per_stock # 购买数量取整(避免碎股) df['shares_to_buy'] = (df['allocated_amount'] / df['latest_price']).astype(int)
内容的提问来源于stack exchange,提问作者shreyash
相关产品推荐
相关产品推荐

