Python脚本因工作目录配置导致文件路径引用异常问题咨询
Python工作目录导致文件引用失败的原因与解决办法
核心原因
你代码里用的../files/sample.txt是相对路径,这类路径的解析基准是Python进程的当前工作目录(即运行脚本时所在的目录,或IDE配置的工作目录),而非config_utils.py脚本文件本身的所在目录。
举个对应你场景的例子:
- 当工作目录设为
level2时,../files/sample.txt会被解析为level2/../files/sample.txt,指向level2的上级目录下的files文件夹,但你的sample.txt实际在level1/files目录中,路径不匹配自然抛出文件不存在的错误。 - 当工作目录改为
level1时,相对路径的解析基准变成了level1,此时../files/sample.txt的解析结果刚好匹配文件实际位置,所以脚本能正常执行。
解决办法
放弃依赖工作目录的相对路径,改为基于脚本文件位置构建绝对路径,这样无论工作目录如何配置,都能精准定位目标文件。
方法1:使用os模块(兼容Python3.4+)
修改config_utils.py代码:
import os f = '' def config_init(): global f # 获取当前脚本文件的绝对路径所在目录 script_dir = os.path.dirname(os.path.abspath(__file__)) # 构建目标文件路径,自动处理层级关系 txt_dir = os.path.normpath(os.path.join(script_dir, '../files/sample.txt')) # 用with语句自动管理文件句柄,更安全 with open(txt_dir, 'r') as file: f = file.read()
方法2:使用pathlib模块(Python3.4+推荐)
pathlib是更现代的路径处理库,语法更简洁直观:
from pathlib import Path f = '' def config_init(): global f # 获取当前脚本文件的绝对路径对象 script_path = Path(__file__).resolve() # 基于脚本位置构建目标文件路径 txt_path = script_path.parent.parent / 'files' / 'sample.txt' # 直接读取文件内容 f = txt_path.read_text()
修改后,无论工作目录设为level1还是level2,脚本都能正确找到sample.txt,无需依赖工作目录配置。
内容的提问来源于stack exchange,提问作者rams
相关产品推荐
相关产品推荐

