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

Python子文件夹路径格式化:如何避免文件找不到错误(Error 2)

问题原因与优化方案

问题原因

你遇到的问题本质是混淆了Python中相对路径的解析规则:
Python里的相对路径(如./、../开头)是基于执行python命令时的当前工作目录来解析的,而非脚本文件本身的存储目录。这就导致两种运行场景下路径解析结果不一致:

  1. 在项目根目录执行python main.py时,当前工作目录是根目录,此时script.py中./data/data.csv被解析为根目录下的对应路径(恰好匹配文件实际位置),所以运行正常。
  2. 直接执行python script.py时(比如进入scripts目录后运行,或在根目录运行python scripts/script.py),当前工作目录发生变化,./data/data.csv的解析结果不再指向正确文件位置,因此报错;改成../data/data.csv后仅适配了直接运行script.py的场景,但运行main.py时,当前工作目录是根目录,../会指向根目录的上级目录,自然找不到文件。

补充说明:./指代当前工作目录,../指代当前工作目录的父目录,二者并非等价,路径层级必须结合当前工作目录判断。

优化方案

要让脚本在任何运行场景下都能正确找到文件,应基于脚本文件本身的存储目录构建绝对路径,彻底摆脱对当前工作目录的依赖。

方案1:修改script.py的路径逻辑

在script.py中通过__file__变量获取自身绝对路径,再拼接数据文件路径:

import os
import pandas as pd

# 获取script.py所在的绝对目录
script_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接data.csv的绝对路径
filepath = os.path.join(script_dir, 'data', 'data.csv')
data_df = pd.read_csv(filepath)

os.path.abspath(__file__)会获取script.py的完整绝对路径,os.path.dirname()提取其所在目录,最后用os.path.join()拼接数据文件路径,确保无论在哪里运行脚本,路径都正确。

方案2:改用模块化导入(推荐)

不建议使用exec(open('./scripts/script.py').read())这种方式调用脚本,更符合Python规范的做法是将scripts目录转为模块,通过导入使用其功能:

  1. 在scripts目录下创建空的__init__.py文件,将其标记为Python包。
  2. 修改script.py,将数据读取逻辑封装为函数:
import os
import pandas as pd

def load_data():
    script_dir = os.path.dirname(os.path.abspath(__file__))
    filepath = os.path.join(script_dir, 'data', 'data.csv')
    return pd.read_csv(filepath)
  1. 在main.py中导入并调用该函数:
from scripts.script import load_data

data_df = load_data()

这种方式更易于维护、调试,也符合Python模块化设计思想。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:47:52