python - 为什么列表上的 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) ?
解决方案
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)
.
推荐阅读
- javascript - 谷歌云功能有时有效,有时无效
- c# - 在 ListView 之间添加一个 gab
- javascript - 为 javascript 编写一个正则表达式以重复捕获组
- android - SwipeRefreshLayout 进度可绘制不会在 KitKat 上完全隐藏
- java - 编排多个 google API 客户端的最佳方式是什么?
- flutter - 使用 get API 获取 null 响应
- c - 我无法正确输入用户表单
- php - 如何修复“调用未定义函数”-PHP、mgp25
- linux - “ORA-29913:执行 ODCIEXTTABLEFETCH 标注时出错 ORA-29400:数据磁带错误”尝试在外部表上运行 Select Stmt 时
- php - 从txt文件获取数据到php的数组