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

Python编写文件读取函数并跨文件调用的方法及路径错误修复方案

解决Python跨目录调用文件时的路径错误问题

这个问题太常见了——本质上是Python解析相对路径的逻辑导致的:Python会从你运行脚本的当前工作目录出发查找文件,而不是从定义函数的脚本所在目录。咱们一步步拆解问题,然后给出最靠谱的解决方案。

问题根源分析

你FolderA里的ConfigHelper.py用了相对路径"Config.json",当从同目录的testA.py调用时,如果你是在FolderA目录下运行testA.py,当前工作目录就是FolderA,自然能找到同目录的Config.json;但从FolderB的Test.py调用时,不管你是在FolderB还是MainFolder下运行脚本,当前工作目录都不是FolderA,所以Python会去错误的位置找Config.json,自然报找不到文件的错误。

解决方案:基于脚本所在目录构建绝对路径

最可靠的方法是让ConfigHelper自己知道Config.json的准确位置——利用Python的__file__属性(它会返回当前模块文件的路径),结合路径处理工具来构建绝对路径。这里有两种实现方式:

方法1:使用os模块(兼容所有Python版本)

修改FolderA里的ConfigHelper.py:

import json
import os

class ConfigHelper:
    def read_config(self):
        # 获取当前脚本(ConfigHelper.py)所在的绝对目录
        script_dir = os.path.dirname(os.path.abspath(__file__))
        # 拼接Config.json的绝对路径
        config_path = os.path.join(script_dir, "Config.json")
        with open(config_path, "r") as jsonfile:
            return json.load(jsonfile)
  • os.path.abspath(__file__):把当前脚本的相对路径转成绝对路径
  • os.path.dirname():提取出脚本所在的目录
  • os.path.join():安全地拼接目录和文件名(自动处理不同系统的路径分隔符,比如Windows的\和Linux的/)

方法2:使用pathlib(Python 3.4+,更简洁直观)

如果你用的是Python3.4及以上,推荐用pathlib,它的面向对象语法更清晰:

import json
from pathlib import Path

class ConfigHelper:
    def read_config(self):
        # 获取当前脚本所在目录的Path对象,resolve()确保是绝对路径
        script_dir = Path(__file__).parent.resolve()
        # 用/拼接路径,和操作系统无关
        config_path = script_dir / "Config.json"
        with open(config_path, "r") as jsonfile:
            return json.load(jsonfile)

确保跨目录导入正常工作

另外,从FolderB的Test.py调用FolderA的ConfigHelper时,要确保Python能找到FolderA模块。如果直接运行Test.py出现导入错误,可以在Test.py开头加上这段代码,把MainFolder加入Python的模块搜索路径:

import sys
from pathlib import Path

# 获取MainFolder的绝对路径并加入sys.path
main_folder = Path(__file__).parent.parent.resolve()
sys.path.append(str(main_folder))

# 现在可以正常导入了
from FolderA.ConfigHelper import ConfigHelper

# 调用函数
config_helper = ConfigHelper()
config_data = config_helper.read_config()
print(config_data)

这样修改后,不管你在哪个目录下运行Test.py,ConfigHelper都能准确找到Config.json的位置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:47:49