为什么列表上的 os.path.join() 和列表上的 os.path.sep.join() 在功能上不相同?
Why are os.path.join() on a list and os.path.sep.join() on a list not functionally identical?
我正在开发一个需要拆分和重新加入一些文件路径的程序,我不确定为什么 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
要复杂得多。最相关的部分如下:
On Windows... Note that since there is a current directory for each drive, os.path.join("c:", "foo")
represents a path relative to the current directory on drive C:
(c:foo
), not c:\foo
.
您可能应该使用 pathlib.PurePath(path).parts
而不是 path.split(os.path.sep)
。
os.path.sep
不是一个有自己方法的独立对象,它是一个字符串。所以它的 join
方法只是将字符串与它们之间的那个字符粘贴在一起。
>>> type(os.path.sep)
<class 'str'>
您可以使用任何字符串中的 join
。
>>> '|'.join(separatedPath)
'C:|Users|choglan|Desktop'
我正在开发一个需要拆分和重新加入一些文件路径的程序,我不确定为什么 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
要复杂得多。最相关的部分如下:
On Windows... Note that since there is a current directory for each drive,
os.path.join("c:", "foo")
represents a path relative to the current directory on driveC:
(c:foo
), notc:\foo
.
您可能应该使用 pathlib.PurePath(path).parts
而不是 path.split(os.path.sep)
。
os.path.sep
不是一个有自己方法的独立对象,它是一个字符串。所以它的 join
方法只是将字符串与它们之间的那个字符粘贴在一起。
>>> type(os.path.sep)
<class 'str'>
您可以使用任何字符串中的 join
。
>>> '|'.join(separatedPath)
'C:|Users|choglan|Desktop'