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

Python跨父目录调用同名文件时os.path.join路径异常问题

问题解析与解决方案

核心原因

你遇到的问题源于Windows系统对路径的特殊处理:c:Users\chale\...是C盘当前工作目录的相对路径,而C:\Users\chale\...才是绝对路径。手动拆分路径后,os.path.join生成了相对路径,自然找不到目标文件。

官方文档说明(翻译)

在Windows系统中,当遇到根路径段(例如r'\foo')时,驱动器不会被重置。如果某个路径段属于不同驱动器或为绝对路径,则之前所有的路径段都会被忽略,驱动器会被重置。注意,由于每个驱动器都有一个当前目录,os.path.join("c:", "foo")表示的是C盘当前目录下的相对路径(即c:foo),而非绝对路径c:\foo。

简单来说:c:开头的路径是相对该驱动器当前目录的,而c:\开头的才是从驱动器根目录开始的绝对路径。你硬编码的r'C:\Users\...'是绝对路径,所以能找到文件;而拼接出来的c:Users\...是相对路径,指向的是C盘当前工作目录下的Users文件夹(而非根目录下的),因此报错。

正确实现方式

不要手动拆分路径,利用Python的路径工具直接定位上层目录,更简洁且不易出错:

方式1:使用Pathlib(推荐,Python 3.4+)

from pathlib import Path

# 获取当前Python文件的绝对路径对象
current_file = Path(__file__).resolve()
# 提取文件名(不含后缀)
file_name = current_file.stem
# 定位到项目根目录下的sql-files文件夹,拼接目标SQL文件路径
sql_file_path = current_file.parent.parent / "sql-files" / f"{file_name}.sql"

# 安全打开文件(用with语句自动关闭)
with open(sql_file_path, 'r') as sql_file:
    sql_content = sql_file.read()
    # 后续执行SQL、pandas处理逻辑...
    # 写入extract-files目录
    csv_file_path = current_file.parent.parent / "extract-files" / f"{file_name}.csv"
    # df.to_csv(csv_file_path)  # 假设df是处理后的DataFrame

方式2:使用os.path模块

import os

# 获取当前Python文件的绝对目录
current_dir = os.path.dirname(os.path.abspath(__file__))
# 定位到项目根目录(当前目录的上层目录)
root_dir = os.path.dirname(current_dir)
# 提取文件名(不含后缀)
file_name = os.path.splitext(os.path.basename(__file__))[0]

# 拼接SQL文件路径
sql_file_path = os.path.join(root_dir, "sql-files", f"{file_name}.sql")

# 打开文件
with open(sql_file_path, 'r') as sql_file:
    sql_content = sql_file.read()
    # 后续处理...
    # 拼接CSV文件路径
    csv_file_path = os.path.join(root_dir, "extract-files", f"{file_name}.csv")

内容的提问来源于stack exchange,提问作者Connor Hale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:37:46