Windows 上的 python os.path.join 忽略第一个路径元素?

标签 python windows path operating-system

考虑以下几点:

>>> from django.conf import settings
>>> import os
>>> settings.VIRTUAL_ENV
'C:/Users/Marcin/Documents/oneclickcos'
>>> settings.EXTRA_BASE
'/oneclickcos/'
>>> os.path.join(settings.VIRTUAL_ENV,settings.EXTRA_BASE)
'/oneclickcos/'

如您所想,我既不希望也不希望将 'C:/Users/Marcin/Documents/oneclickcos''/oneclickcos/' 串联起来'/oneclickcos/'.

奇怪的是,再次反转路径组件显示 python 忽略了第一个路径组件:

>>> os.path.join(settings.EXTRA_BASE,settings.VIRTUAL_ENV)
'C:/Users/Marcin/Documents/oneclickcos'

虽然这像预期的那样工作:

>>> os.path.join('/foobar',settings.VIRTUAL_ENV,'barfoo')
'C:/Users/Marcin/Documents/oneclickcos\\barfoo'

我当然是在 Windows (Windows 7) 上运行 native python。

为什么会发生这种情况,我该怎么办?

最佳答案

这几乎就是 os.path.join 的定义方式(引用 docs ):

If any component is an absolute path, all previous components (on Windows, including the previous drive letter, if there was one) are thrown away

而且我认为这通常是一件好事,因为它避免了创建无效路径。如果您想避免这种行为,请不要为其提供绝对路径。是的,以斜杠开头的是绝对路径。一个快速而肮脏的解决方案只是删除前导斜杠(settings.EXTRA_BASE.lstrip('/') 如果您想以编程方式执行此操作)。

关于Windows 上的 python os.path.join 忽略第一个路径元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7865293/

相关文章:

windows - 从批处理文件在新窗口中启动进程

java - leetcode 生成括号算法

python - 用ansible中的多个值替换多个模式

c++ - 如何使用 boost.process 重定向标准输入和标准输出

windows - 如果组策略阻止 7zip,我该如何使用 Chocolatey?

bash - FFmpeg 和 bash,使用保存路径将多个文件转码到另一个驱动器

android - 安装 apk 后,.dex 文件位于何处?

java - Eclipse 中的 CPLEX 库路径错误

python - django 错误 - ImportError : No module named apps

python - 如何忽略 flake8 中的单行 if-else 语句验证?