我想加入当前目录路径和goal_dir
目录树中某处的相对目录路径,所以我得到了绝对路径goal_dir
.这是我的尝试:
import os
goal_dir = os.path.join(os.getcwd(), "../../my_dir")
Run Code Online (Sandbox Code Playgroud)
现在,如果当前目录是C:/here/I/am/
,它将它们连接起来C:/here/I/am/../../my_dir
,但我想要的是C:/here/my_dir
.似乎os.path.join
并不那么聪明.
我怎样才能做到这一点?
ale*_*cxe 29
你可以使用normpath,realpath或abspath:
import os
goal_dir = os.path.join(os.getcwd(), "../../my_dir")
print goal_dir # prints C:/here/I/am/../../my_dir
print os.path.normpath(goal_dir) # prints C:/here/my_dir
print os.path.realpath(goal_dir) # prints C:/here/my_dir
print os.path.abspath(goal_dir) # prints C:/here/my_dir
Run Code Online (Sandbox Code Playgroud)
考虑使用os.path.abspath
它将评估绝对路径
或可以使用os.path.normpath
它返回规范化的路径(规范化路径,消除双斜杠等)
一个人应该根据需求选择这些功能之一
在abspath
您的示例中,您无需使用os.path.join
os.path.abspath("../../my_dir")
Run Code Online (Sandbox Code Playgroud)
os.path.normpath
如果您对相对路径感兴趣,则应使用。
>>> os.path.normpath("../my_dir/../my_dir")
'../my_dir'
Run Code Online (Sandbox Code Playgroud)
有关处理文件路径的其他参考:
最近,我发现了 pathlib。
from pathlib import Path
cwd = Path.cwd()
goal_dir = cwd.parent.parent / "my_dir"
Run Code Online (Sandbox Code Playgroud)
或者,使用当前脚本的文件:
cwd = Path(__file__).parent
goal_dir = cwd.parent.parent / "my_dir"
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,都可以像这样找到简化形式的绝对路径:
goal_dir = goal_dir.resolve()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
33730 次 |
最近记录: |