os.path.dirname(__ file__)返回空

Fla*_*ake 148 python

我想获取当前目录的路径,在该目录下执行.py文件.

例如,一个D:\test.py包含代码的简单文件:

import os

print os.getcwd()
print os.path.basename(__file__)
print os.path.abspath(__file__)
print os.path.dirname(__file__)
Run Code Online (Sandbox Code Playgroud)

输出结果是奇怪的:

D:\
test.py
D:\test.py
EMPTY
Run Code Online (Sandbox Code Playgroud)

我期待从相同的结果getcwd()path.dirname().

鉴于os.path.abspath = os.path.dirname + os.path.basename,为什么

os.path.dirname(__file__)
Run Code Online (Sandbox Code Playgroud)

返回空?

Sve*_*ach 237

因为os.path.abspath = os.path.dirname + os.path.basename不成立.我们宁愿拥有

os.path.dirname(filename) + os.path.basename(filename) == filename
Run Code Online (Sandbox Code Playgroud)

双方dirname()basename()只拆分通过文件名成组件,而不考虑当前目录.如果您还想考虑当前目录,则必须明确地这样做.

要获取绝对路径的dirname,请使用

os.path.dirname(os.path.abspath(__file__))
Run Code Online (Sandbox Code Playgroud)

  • 请注意上面的注释有一个粗体,因为标记格式化,双方都应该有下划线.原始答案已正确更改 (11认同)
  • 嗨,Sven,你是对的,它应该是os.path.dirname(os.path.abspath(__ file__)).谢谢!仅供参考,你在最后一行得到一个小错字. (3认同)
  • 请注意,我们永远不会有 `os.path.dirname(filename) + os.path.basename(filename) == filename` 因为缺少目录分隔符。我们宁愿有: `os.path.join(os.path.dirname(filename), os.path.basename(filename)) == filename` (2认同)

小智 8

也可以这样使用:

dirname(dirname(abspath(__file__)))
Run Code Online (Sandbox Code Playgroud)


小智 7

import os.path

dirname = os.path.dirname(__file__) or '.'
Run Code Online (Sandbox Code Playgroud)


RY_*_*eng 7

os.path.split(os.path.realpath(__file__))[0]
Run Code Online (Sandbox Code Playgroud)

os.path.realpath(__file__)返回当前脚本的绝对路径;os.path.split(abspath)[0] 返回当前目录


Mel*_*lle 6

从Python 3.4开始,你可以使用pathlib获取文件的目录:

\n
from pathlib import Path\n\n# get parent directory\ncurr_dir = Path(__file__).parent\n\nfile_path = curr_dir.joinpath(\'otherfile.txt\')\n
Run Code Online (Sandbox Code Playgroud)\n

编辑:要获取当前目录,请使用

\n
Path.cwd()\n
Run Code Online (Sandbox Code Playgroud)\n

谢谢@Nuno Andr\xc3\xa9

\n


Mik*_*ail 5

print(os.path.join(os.path.dirname(__file__))) 
Run Code Online (Sandbox Code Playgroud)

你也可以用这种方式