如何获取当前文件所在目录的完整路径

如何获取当前文件所在目录的完整路径

技术背景

在Python编程中,有时需要获取当前文件所在目录的完整路径。这在处理文件读写、资源加载等操作时非常有用。Python提供了多种方法来实现这一需求,下面将详细介绍不同Python版本下的实现方式。

实现步骤

Python 3

获取正在运行脚本的目录

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

获取当前工作目录

1
2
import pathlib
pathlib.Path().resolve()

从Python 3开始,推荐使用pathlib模块:

1
2
3
from pathlib import Path
print("File Path:", Path(__file__).absolute())
print("Directory Path:", Path().absolute()) # 这是当前工作目录,不是 __file__ 所在目录

若在Python 3.x中获取完整绝对路径:

1
2
3
from pathlib import Path

path = Path(__file__).parent.absolute()

解释:

  • Path(__file__) 是当前文件的路径。
  • .parent 返回文件所在的目录。
  • .absolute() 返回完整的绝对路径。

Python 2 和 3

获取正在运行脚本的目录

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

获取当前工作目录

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

Jupyter Notebook

在Jupyter Notebook中,__file__ 不会返回预期的值,因此可以使用以下方法:

方法1

1
%cwd

方法2

1
2
from pathlib import Path
Path.cwd()

方法3

1
2
3
4
import sys
from pathlib import Path
path_file = Path(sys.path[0])
print(path_file)

其他方法

简单分割法(Python 2 和 3)

1
2
from os import sep
print(__file__.rsplit(sep, 1)[0] + sep)

IPython 魔法命令

在IPython中:

1
2
3
4
5
from IPython.terminal.embed import InteractiveShellEmbed

ip_shell = InteractiveShellEmbed()

present_working_directory = ip_shell.magic("%pwd")

在IPython Jupyter Notebook中可直接使用:

1
present_working_directory = %pwd

自定义函数(运行Python under IIS in CGI)

1
2
3
4
import os 
def getLocalFolder():
path=str(os.path.dirname(os.path.abspath(__file__))).split(os.sep)
return path[len(path)-1]

无模块方法

1
2
3
def get_path():
return (__file__.replace(f"<your script name>.py", ""))
print(get_path())

核心代码

使用 pathlib 获取当前文件所在目录

1
2
3
from pathlib import Path
path = Path(__file__).parent.absolute()
print(path)

使用 os.path 获取当前文件所在目录

1
2
3
import os
dir_path = os.path.dirname(os.path.realpath(__file__))
print(dir_path)

最佳实践

  • 从Python 3开始,推荐使用pathlib模块,因为它是面向对象的方式,更符合现代Python编程风格。
  • 如果需要将pathlibPath对象转换为字符串,可以使用str(path)

常见问题

  • __file__ 未定义:在交互式环境(如Jupyter Notebook)中,__file__ 可能未定义。此时可以使用Path().absolute()或其他适用于交互式环境的方法。
  • Jupyter Notebook中 __file__ 不符合预期:在Jupyter Notebook中,__file__ 不会返回预期的值,可以使用%cwdPath.cwd()Path(sys.path[0]) 来获取路径。

如何获取当前文件所在目录的完整路径
https://119291.xyz/posts/how-to-get-full-path-of-current-files-directory/
作者
ww
发布于
2025年6月9日
许可协议