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

为何无法用pathlib.Path或os.path.join定义带盘符的完整路径?

Windows下Python路径拼接中盘符冒号的问题解析

这是预期行为吗?

是的,这完全符合Windows的路径规则和Python路径模块的设计逻辑。

为什么会这样设计?

在Windows系统里,C: 和 C:\ 是两种完全不同的路径语义:

  • C: 指的是C盘当前的工作目录(比如你之前用cd C:\Users切换过目录,那C:就指向C:\Users)
  • C:\ 才是C盘的根目录

Python的pathlib.Path和os.path.join都是严格遵循Windows原生路径规则的,所以当你传"C:"作为路径片段时,它会被当作相对当前目录的盘符前缀,后续路径片段会直接拼在后面,不会自动添加分隔符。

如何正确指定完整路径?

有几种靠谱的写法:

  • 用带根目录的盘符路径,末尾加斜杠(/或转义后的\):
    from pathlib import Path
    Path("C:/", "foo", "bar")  # 结果:WindowsPath('C:/foo/bar')
    Path("C:\\", "foo", "bar") # 转义反斜杠,结果同上
    
  • 直接传完整的字符串路径:
    Path("C:/foo/bar")
    Path("C:\\foo\\bar")
    
  • 先获取盘符的根目录,再拼接子路径:
    Path("C:").resolve() / "foo" / "bar"
    

对比你测试的代码,正确写法和错误写法的差异:

>>> from pathlib import Path
>>> Path("C:", "foo", "bar")  # 错误:C:是相对当前目录的前缀
WindowsPath('C:foo/bar')
>>> Path("C:/", "foo", "bar") # 正确:指定了C盘根目录
WindowsPath('C:/foo/bar')

内容的提问来源于stack exchange,提问作者Hauke L.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 06:20:01