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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:06:18