一个不丢弃前导斜杠的os.path.join()?

14 投票
2 回答
4370 浏览
提问于 2025-04-17 16:33

Python中的 os.path.join 被一些人认为“几乎没什么用”,因为它会忽略掉任何在包含开头斜杠的参数之前的部分。暂且不谈这是故意设计并且有文档说明的行为,是否有现成的函数或代码模式可以避免这种忽略呢?

假设 HOMEPATH=\users\myname,下面的代码会忽略掉路径的开头部分:

print os.path.join('C:\one', os.environ.get("HOMEPATH"), 'three')

结果:

\Users\myname\three

期望的结果:

C:\one\Users\myname\three

我之前遇到过几次这个问题,现在我能比较好地注意到开头的斜杠,尤其是当是我自己写的代码时。但是如果你不知道传入的字符串是什么样子,比如在这个例子中,该怎么办呢?

2 个回答

6

只需要去掉斜杠就可以了。

path = os.environ.get("HOMEPATH").lstrip(os.path.sep)
os.path.join('C:\one', path, 'three')
11

也许可以用 os.environ.get("HOMEPATH").lstrip(os.path.sep) 这个方法... 其实你可以很简单地自己写一个 join 函数,让它对每个参数(或者从第二个参数开始)都这样处理。

撰写回答