Python如何在未知完整路径时访问并行同级目录读写文件
跨设备访问同级目录的Python路径实现方案
你的思路方向是对的,用Python标准库的路径处理模块完全可以实现需求,不需要硬编码绝对路径,能适配任意设备上的目录位置。
核心逻辑非常简单:不要依赖运行时的工作目录,而是通过Python内置的__file__变量拿到当前脚本自身的存储路径,再向上推导得到父目录,最后拼接目标的data、figures目录路径即可,全程自动适配Windows、macOS、Linux的路径分隔符规则。
方法一:使用os模块(全Python版本兼容)
该方案兼容性最好,适合所有Python运行环境,在scripts目录下的任意.py文件中添加如下代码即可:
import os # 获取当前运行脚本的绝对路径 current_script_abspath = os.path.abspath(__file__) # 获取脚本所在的scripts目录路径 scripts_dir = os.path.dirname(current_script_abspath) # 获取scripts的上一级,也就是项目根目录(parent directory) project_root = os.path.dirname(scripts_dir) # 拼接目标目录路径 data_dir = os.path.join(project_root, "data") figures_dir = os.path.join(project_root, "figures")
使用示例
# 读取data目录下的txt文件 sample_data_path = os.path.join(data_dir, "file.txt") with open(sample_data_path, "r", encoding="utf-8") as f: data_content = f.read() # 保存matplotlib图表到figures目录 import matplotlib.pyplot as plt plt.plot([1,2,3], [4,5,1]) output_fig_path = os.path.join(figures_dir, "result.png") plt.savefig(output_fig_path)
注意:不要用
os.getcwd()获取路径,该方法返回的是你执行脚本时终端所在的工作目录,如果你从其他目录下调用脚本,得到的路径会出错。基于__file__推导的路径和脚本执行位置无关,稳定性最高。
方法二:使用pathlib模块(Python3.4+推荐写法)
pathlib是Python3.4之后加入标准库的面向对象路径处理模块,语法更简洁,自动处理跨平台路径适配:
from pathlib import Path # 路径推导 current_script = Path(__file__).resolve() scripts_dir = current_script.parent project_root = scripts_dir.parent # 拼接目标路径,用/运算符直接拼接,不需要调用专门的join方法 data_dir = project_root / "data" figures_dir = project_root / "figures"
使用示例
# 读取data目录文件,Path对象可以直接传入open函数 sample_data_path = data_dir / "file.txt" with open(sample_data_path, "r", encoding="utf-8") as f: data_content = f.read() # 保存图表 import matplotlib.pyplot as plt plt.plot([1,2,3], [4,5,1]) plt.savefig(figures_dir / "result.png")
可选优化
如果担心运行时data、figures目录不存在,可以在路径定义后添加自动创建目录的逻辑,避免路径报错:
os模块版本:
os.makedirs(data_dir, exist_ok=True) os.makedirs(figures_dir, exist_ok=True)
pathlib模块版本:
data_dir.mkdir(exist_ok=True, parents=True) figures_dir.mkdir(exist_ok=True, parents=True)
添加后即使对应目录被误删,脚本运行时也会自动创建对应目录。
内容的提问来源于stack exchange,提问作者Tyler B
相关产品推荐
相关产品推荐

