我倾向于只使用正斜杠作为路径('/'),python在windows上也很乐意这样做。在对os.path.join的描述中,它说如果你想跨平台,这是正确的方式。但当我使用它时,我得到的是混合斜杠:
import os
a = 'c:/'
b = 'myFirstDirectory/'
c = 'mySecondDirectory'
d = 'myThirdDirectory'
e = 'myExecutable.exe'
print os.path.join(a, b, c, d, e)
# Result:
c:/myFirstDirectory/mySecondDirectory\myThirdDirectory\myExecutable.exe
这是正确的吗?我应该在事后检查并更正它,还是有更好的方法?
谢谢
编辑:在询问路径时,我也会得到混合斜杠
import sys
for item in sys.path:
print item
# Result:
C:\Program Files\Autodesk\Maya2013.5\bin
C:\Program Files\Autodesk\Maya2013.5\mentalray\scripts\AETemplates
C:\Program Files\Autodesk\Maya2013.5\Python
C:\Program Files\Autodesk\Maya2013.5\Python\lib\site-packages
C:\Program Files\Autodesk\Maya2013.5\bin\python26.zip\lib-tk
C:/Users/nookie/Documents/maya/2013.5-x64/prefs/scripts
C:/Users/nookie/Documents/maya/2013.5-x64/scripts
C:/Users/nookie/Documents/maya/scripts
C:\Program Files\Nuke7.0v4\lib\site-packages
C:\Program Files\Nuke7.0v4/plugins/modules
发布于 2013-05-02 16:45:37
您现在自己提供了一些斜杠,并让os.path.join
选择其他斜杠。最好是让python选择所有这些,或者自己提供它们。Python对路径的后半部分使用反斜杠,因为在Windows上反斜杠是默认的。
import os
a = 'c:' # removed slash
b = 'myFirstDirectory' # removed slash
c = 'mySecondDirectory'
d = 'myThirdDirectory'
e = 'myExecutable.exe'
print os.path.join(a + os.sep, b, c, d, e)
我还没有测试过这一点,但我希望这能有所帮助。更常见的情况是有一个基本路径,并且只需要连接一个其他元素,主要是文件。
顺便说一句,您可以在想要为运行os.sep
的操作系统提供最佳分隔符的那些时刻使用python。
Windows: as dash-tom-bang状态,显然对于Windows端来说,你确实需要在路径的根目录中包含一个分隔符。否则,您将创建相对路径,而不是绝对路径。
发布于 2013-09-13 08:53:28
您可以在path.join()
之后使用.replace()
来确保斜杠是正确的:
# .replace() all backslashes with forwardslashes
print os.path.join(a, b, c, d, e).replace("\\","/")
这将给出输出:
c:/myFirstDirectory/mySecondDirectory/myThirdDirectory/myExecutable.exe
正如@sharpcloud建议的那样,最好从输入字符串中删除斜杠,但这是另一种选择。
发布于 2016-11-27 06:59:13
尝试使用abspath (使用python 3)
import os
a = 'c:/'
b = 'myFirstDirectory/'
c = 'mySecondDirectory'
d = 'myThirdDirectory'
e = 'myExecutable.exe'
print(os.path.abspath(os.path.join(a, b, c, d, e)))
输出:
c:\myFirstDirectory\mySecondDirectory\myThirdDirectory\myExecutable.exe
进程已完成,退出代码为0
https://stackoverflow.com/questions/16333569
复制相似问题