为何无法用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.
相关产品推荐
相关产品推荐

