我正在开发一个需要拆分并重新加入一些文件路径的程序,但我不确定为什么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)吗?
os.path.join
并非是path.split(os.path.sep)
的倒数。如果您阅读docs,您将发现比仅在参数之间插入os.path.sep
更复杂的过程的描述。最相关的部分如下:
在Windows上,请注意,由于每个驱动器都有一个当前目录,因此
os.path.join("c:", "foo")
表示相对于驱动器C:
(c:foo
)而非c:\foo
上当前目录的路径。
您可能应该使用pathlib.PurePath(path).parts
而不是path.split(os.path.sep)
。