首页 > 解决方案 > 为什么列表上的 os.path.join() 和列表上的 os.path.sep.join() 在功能上不相同?

问题描述

我正在开发一个需要拆分和重新加入一些文件路径的程序,但我不确定为什么 os.path.join(*list) 和 os.path.sep.join(list) 会产生不同的结果分隔路径中存在的驱动器号。

import os

path = 'C:\\Users\\choglan\\Desktop'

separatedPath = path.split(os.path.sep)
# ['C:', 'Users', 'choglan', 'Desktop']

path = os.path.sep.join(separatedPath)
# C:\\Users\\choglan\\Desktop
print(path)

path = os.path.join(*separatedPath)
# C:Users\\choglan\\Desktop
print(path)

为什么会这样?即使 os.path.join(*list) 似乎更常用,我是否应该只为我的程序使用 os.path.sep.join(list) ?

标签: pythonpython-3.xos.path

解决方案


os.path.join不打算成为 的倒数path.split(os.path.sep)。如果您阅读文档os.path.sep,您会发现一个比仅仅停留在参数之间更复杂的过程的描述。最相关的部分如下:

在 Windows 上... 请注意,由于每个驱动器都有一个当前目录,因此os.path.join("c:", "foo")表示相对于驱动器C:( c:foo) 上当前目录的路径,而不是c:\foo.

您可能应该使用pathlib.PurePath(path).parts而不是path.split(os.path.sep).


推荐阅读