好的...我不知道模块在哪里x
,但是我知道我需要将目录的路径上移两个级别。
因此,有没有一种更优雅的方法:
import os
two_up = os.path.dirname(os.path.dirname(__file__))
欢迎使用适用于Python 2和3的解决方案!
Answers:
Path
该类parents
取决于执行位置。如果__file__
从当前目录执行,则Path
该类将没有父级。@ Sebi2020的答案应该被接受,或者应该使用您的原始方法。我相信您的原始方法更具可读性。
p = Path(os.path.abspath(__file__)).parents[1]
os.path.abspath
,您还可以使用Path(__file__).resolve().parents[1]
p = Path(__file__).resolve().parents[1]
。我也将其添加为答案。
很容易:
这是您想要的:
import os.path as path
two_up = path.abspath(path.join(__file__ ,"../.."))
os.pardir
而不是..
。
__file__
。
就个人而言,我发现使用os模块是如下所述的最简单的方法。如果您仅上一层,则将('../ ..')替换为('..')。
import os
os.chdir('../..')
--Check:
os.getcwd()
您可以将其用作通用解决方案:
import os
def getParentDir(path, level=1):
return os.path.normpath( os.path.join(path, *([".."] * level)) )
更多的跨平台实现将是:
import pathlib
two_up = (pathlib.Path(__file__) / ".." / "..").resolve()
parent
Windows不支持使用。还需要添加.resolve()
,以:
设置路径为绝对路径,解析路径上的所有符号链接并对其进行规范化(例如,在Windows下将斜杠转换为反斜杠)
parent
无法在Windows上使用的资源?自您撰写此评论以来,似乎已解决此问题。在Windows 10上使用Python 3.7.2对我来说效果很好。–
parent
使用python 3.6.5在Windows 10上工作。您在谈论@Zhukovgeen的哪个版本的python?
我还没有看到2.7的可行答案,它不需要安装其他依赖项,并且也从文件目录开始。作为单行解决方案不是很好,但是使用标准实用程序并没有错。
import os
grandparent_dir = os.path.abspath( # Convert into absolute path string
os.path.join( # Current file's grandparent directory
os.path.join( # Current file's parent directory
os.path.dirname( # Current file's directory
os.path.abspath(__file__) # Current file path
),
os.pardir
),
os.pardir
)
)
print grandparent_dir
为了证明它是~/Documents/notes
可行的,我从这里开始只是为了说明当前目录不会影响结果。我将grandpa.py
带有该脚本的文件放在名为“ scripts”的文件夹中。在Mac上,它会爬网到Documents目录,然后爬到用户目录。
(testing)AlanSE-OSX:notes AlanSE$ echo ~/Documents/scripts/grandpa.py
/Users/alancoding/Documents/scripts/grandpa.py
(testing)AlanSE-OSX:notes AlanSE$ python2.7 ~/Documents/scripts/grandpa.py
/Users/alancoding
这是对父目录dir的答案的明显推断。最好在行数较少的情况下使用一般的解决方案,而不是效果较差的解决方案。
pathlib
解决方案更好一些,也更具可读性,但Python 2.7不包含该解决方案。我想说的是坚持下去,也许再加上评论。