noo*_*kie 52 python windows path
我倾向于只对路径使用正斜杠('/'),而python也对它在窗口上也很满意.在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
Run Code Online (Sandbox Code Playgroud)
它是否正确?我应该在之后检查并纠正它还是有更好的方法?
谢谢
编辑:当我要求路径时,我也会得到混合斜杠
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
Run Code Online (Sandbox Code Playgroud)
Max*_*mus 37
您可以使用.replace()
after path.join()
来确保斜杠是正确的:
# .replace() all backslashes with forwardslashes
print os.path.join(a, b, c, d, e).replace("\\","/")
Run Code Online (Sandbox Code Playgroud)
这给出了输出:
c:/myFirstDirectory/mySecondDirectory/myThirdDirectory/myExecutable.exe
Run Code Online (Sandbox Code Playgroud)
正如@sharpcloud建议的那样,最好从输入字符串中删除斜杠,但这是另一种选择.
pyr*_*lus 30
你现在提供一些自己的斜杠,并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)
Run Code Online (Sandbox Code Playgroud)
我没有测试过这个,但我希望这会有所帮助.拥有基本路径并且只需要加入另一个元素(主要是文件)更为常见.
顺便说说; 你可以使用os.sep
那些想要拥有python正在运行的操作系统的最佳分隔符的时刻.
编辑:作为dash-tom-bang状态,显然对于Windows,您需要为路径的根目录包含一个分隔符.否则,您将创建相对路径而不是绝对路径.
And*_*aal 10
尝试使用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)))
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
C:\ myFirstDirectory\mySecondDirectory\myThirdDirectory\myExecutable.exe
进程以退出代码0结束
根据评论编辑: path = os.path.normpath(path)
我以前的答案缺乏处理转义字符的能力,因此不应该使用:
其次,使用正确的符号将它们粘合在一起.
import os
path = 'c:\www\app\my/folder/file.php'
# split the path to parts by either slash symbol:
path = re.compile(r"[\/]").split(path)
# join the path using the correct slash symbol:
path = os.path.join(*path)
Run Code Online (Sandbox Code Playgroud)如果出于任何原因您需要自己提供路径并且您使用了 python 3.4 以上的任何内容,则可以使用pathlib
from pathlib import Path, PurePosixPath
a = PurePosixPath('c:/')
b = PurePosixPath('myFirstDirectory/')
c = 'mySecondDirectory'
d = 'myThirdDirectory'
e = 'myExecutable.exe'
print(a / b / c / d / e)
# Result
c:/myFirstDirectory/mySecondDirectory/myThirdDirectory/myExecutable.exe
Run Code Online (Sandbox Code Playgroud)
当我需要用户提供资产目录的位置并且我的代码正在使用 Windows 路径字符串查找时,我使用了它
In [1]: from pathlib import Path, PureWindowsPath
In [2]: USER_ASSETS_DIR = Path('/asset/dir') # user provides this form environment variable
In [3]: SPECIFIC_ASSET = PureWindowsPath('some\\asset')
In [4]: USER_ASSETS_DIR / SPECIFIC_ASSET
Out[4]: PosixPath('/asset/dir/some/asset')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
63511 次 |
最近记录: |