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
相关产品推荐
相关产品推荐

