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

Python调用其他脚本时切换工作目录的问题求助

问题描述

我拥有base.py、read_a_file.py和file_to_be_read.txt三个文件,read_a_file.py中的read_file函数负责读取file_to_be_read.txt,base.py导入该脚本并调用此函数。文件结构如下:

-directory 
   -base.py
-read_a_file.py
-file_to_be_read.txt

运行base.py时触发FileNotFoundError,原因是工作目录为root/directory/而非根目录,尝试sys.path.append(root)未解决问题。完整报错栈:

Error
Traceback (most recent call last):
  File "C:\Users\agctute\PycharmProjects\sapaigenealg\myAI\tests\aitests.py", line 26, in test_AI
    self.ai = AI(player=Player())
  File "C:\Users\agctute\PycharmProjects\sapaigenealg\myAI\playerai.py", line 24, in __init__
    self.tier_list = read_tier_list()
  File "C:\Users\agctute\PycharmProjects\sapaigenealg\myAI\stat_comparison.py", line 47, in read_tier_list
    with open('stat_tier_list.txt', 'r') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'stat_tier_list.txt'
解决方案

sys.path.append用于添加Python模块的搜索路径,和文件读取的路径无关,因此无法解决该问题。要解决文件找不到的问题,需确保程序能定位到目标文件的正确路径,以下是两种可靠方案:

方案1:基于脚本文件路径动态构建目标文件路径

在read_a_file.py中,通过获取当前脚本的绝对路径,拼接出目标文件的完整路径,这样无论从哪个目录运行base.py,都能正确找到文件:

import os

def read_file():
    # 获取当前read_a_file.py脚本所在的目录
    script_dir = os.path.dirname(os.path.abspath(__file__))
    # 拼接file_to_be_read.txt的绝对路径
    target_file_path = os.path.join(script_dir, "file_to_be_read.txt")
    with open(target_file_path, 'r') as f:
        return f.read()

方案2:直接使用目标文件的绝对路径

如果明确知道file_to_be_read.txt的完整绝对路径,可直接在函数中使用该路径打开文件:

def read_file():
    # 替换为实际的绝对路径
    target_file_path = r"C:\your_root_directory\file_to_be_read.txt"
    with open(target_file_path, 'r') as f:
        return f.read()

注意:此方法路径为硬编码,更换运行环境后需要手动修改路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 02:06:34