Python脚本跨目录运行遇FileNotFound问题,如何实现健壮路径引用?
解决脚本路径引用的健壮性问题
问题根源在于你用的是相对当前工作目录的路径,而非脚本自身所在目录的路径:
- 直接在控制台运行
python script.py时,当前工作目录就是脚本所在目录,因此能找到Pickles文件夹; - 用IPython的
%run从其他目录执行时,当前工作目录是IPython启动的目录,自然找不到脚本所在目录下的Pickles。
不用绝对路径的话,有两种实用方案:
方法一:用os.path模块(兼容所有Python版本)
通过__file__变量获取脚本的绝对路径,再拼接出Pickles文件夹的路径:
import os import pickle from datetime import date # 获取脚本所在的目录 script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接目标文件路径(os.path.join自动适配系统路径分隔符) pickle_file = os.path.join(script_dir, 'Pickles', f'{name}_{date.strftime("%y-%b-%d")}') with open(pickle_file, 'rb') as f: obj = pickle.load(f)
方法二:用pathlib模块(Python 3.4+推荐)
pathlib是Python 3.4新增的面向对象路径处理模块,写法更简洁直观:
from pathlib import Path import pickle from datetime import date # 获取脚本所在目录的Path对象,resolve()确保是绝对路径 script_dir = Path(__file__).parent.resolve() # 用/运算符拼接路径,自动适配Windows/Linux的路径分隔符 pickle_file = script_dir / 'Pickles' / f'{name}_{date.strftime("%y-%b-%d")}' with open(pickle_file, 'rb') as f: obj = pickle.load(f)
这两种方法都能保证脚本不管从哪个目录运行,都会从自身所在目录去找Pickles文件夹,彻底解决路径问题。
内容的提问来源于stack exchange,提问作者keynesiancross
相关产品推荐
相关产品推荐

