考虑以下几点:
>>> 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/