如何获取当前文件的目录路径? 我试着:

>>> os.path.abspath(__file__)
'C:\\python27\\test.py'

但我想:

'C:\\python27\\'

当前回答

import os
print(os.path.dirname(__file__))

其他回答

特殊变量__file__包含当前文件的路径。由此,我们可以使用pathlib或os获取目录。路径模块。

Python 3

对于正在运行的脚本的目录:

import pathlib
pathlib.Path(__file__).parent.resolve()

对于当前工作目录:

import pathlib
pathlib.Path().resolve()

Python 2和3

对于正在运行的脚本的目录:

import os
os.path.dirname(os.path.abspath(__file__))

如果你指的是当前工作目录:

import os
os.path.abspath(os.getcwd())

注意,文件的前后是两个下划线,而不是一个。

还要注意,如果你是交互式运行的,或者从文件以外的东西(例如:数据库或在线资源)加载代码,__file__可能不会被设置,因为没有“当前文件”的概念。上面的答案假设运行文件中的python脚本是最常见的场景。

参考文献

python文档中的Pathlib。 操作系统。Python 2.7, os. pathpath - Python 3 操作系统。getcwd - Python 2.7, os。3 . getcwd - Python __file__变量是什么意思?

import os
print(os.path.dirname(__file__))

IPython有一个神奇的命令%pwd来获取当前的工作目录。它可以在以下方面使用:

from IPython.terminal.embed import InteractiveShellEmbed

ip_shell = InteractiveShellEmbed()

present_working_directory = ip_shell.magic("%pwd")

在IPython上Jupyter Notebook %pwd可以直接使用如下:

present_working_directory = %pwd

我发现以下命令返回Python 3脚本父目录的完整路径。

Python 3脚本:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from pathlib import Path

#Get the absolute path of a Python3.6 and above script.
dir1 = Path().resolve()  #Make the path absolute, resolving any symlinks.
dir2 = Path().absolute() #See @RonKalian answer 
dir3 = Path(__file__).parent.absolute() #See @Arminius answer
dir4 = Path(__file__).parent 

print(f'dir1={dir1}\ndir2={dir2}\ndir3={dir3}\ndir4={dir4}')

讲话! !

Dir1和dir2仅在运行位于当前工作目录中的脚本时有效,但在任何其他情况下都将中断。 假设Path(__file__).is_absolute()为True,在dir3中使用.absolute()方法显得多余。 最短的命令是dir4。

解释链接:.resolve(), .absolute(), Path(file).parent().absolute()

试试这个:

import os
dir_path = os.path.dirname(os.path.realpath(__file__))