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

Python被导入工具脚本如何使用相对自身路径读取资源文件

Python包内相对路径访问资源无拼接解决方案

Python的相对路径默认始终相对于运行时的当前工作目录(CWD),不存在原生的“自动以当前py文件所在目录为基准解析相对路径”的语法,以下是无需手动拼接os.path.dirname(__file__)的可行实现方案:

方案1:使用标准库importlib.resources(推荐,Python 3.7+支持)

这是Python官方推荐的包内资源访问方式,完全基于包的导入结构定位文件,不需要手动拼接任何路径,兼容打包、虚拟环境等各类场景:
修改clean_data.py代码如下:

import pandas as pd
from importlib.resources import files
# 导入存放数据的子包
import utils.data

def get_data(path=None):
    if not path:
        # 直接通过包结构定位data.csv
        data_path = files(utils.data).joinpath("data.csv")
        data = pd.read_csv(data_path)
    else:
        data = pd.read_csv(path)
    return data

注意:需要在utils/data目录下新增空白的__init__.py文件,将目录标记为Python可导入的包。

方案2:临时切换工作目录(仅作参考,不推荐长期使用)

如果完全不想修改clean_data.py的原有代码,可以只修改外层main.py,在调用函数前临时切换工作目录到utils文件夹,调用完成后自动切回原目录:

import os
from contextlib import contextmanager
from utils.clean_data import get_data

# 定义切换工作目录的上下文管理器
@contextmanager
def switch_cwd(target_path):
    original_cwd = os.getcwd()
    os.chdir(target_path)
    try:
        yield
    finally:
        os.chdir(original_cwd)

# 临时切换工作目录后调用函数
with switch_cwd("./utils"):
    data = get_data()

该方案的缺点是会影响clean_data.py内所有路径逻辑的解析,仅适合临时测试使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:45:05