Mar*_*cin 3 python windows operating-system path
考虑以下:
>>> 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/'
Run Code Online (Sandbox Code Playgroud)
你可以想像,我指望或希望的串联'C:/Users/Marcin/Documents/oneclickcos'和'/oneclickcos/'要'/oneclickcos/'.
奇怪的是,反转路径组件再一次显示python忽略了第一个路径组件:
>>> os.path.join(settings.EXTRA_BASE,settings.VIRTUAL_ENV)
'C:/Users/Marcin/Documents/oneclickcos'
Run Code Online (Sandbox Code Playgroud)
虽然这有点像预期的:
>>> os.path.join('/foobar',settings.VIRTUAL_ENV,'barfoo')
'C:/Users/Marcin/Documents/oneclickcos\\barfoo'
Run Code Online (Sandbox Code Playgroud)
我当然是在Windows(Windows 7)上使用本机python运行的.
为什么会发生这种情况,我该怎么办呢?
小智 6
这几乎是如何os.path.join定义的(引用文档):
如果任何组件是绝对路径,则所有以前的组件(在Windows上,包括之前的驱动器号,如果有的话)都会被丢弃
我会说它通常是一件好事,因为它避免了创建无效路径.如果要避免此行为,请不要为其提供绝对路径.是的,从斜杠开始有资格作为绝对路径.快速而肮脏的解决方案就是删除前导斜杠(settings.EXTRA_BASE.lstrip('/')如果您想以编程方式执行).