如何获取当前文件所在目录的完整路径
技术背景
在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())
|
若在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
方法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编程风格。 - 如果需要将
pathlib
的Path
对象转换为字符串,可以使用str(path)
。
常见问题
__file__
未定义:在交互式环境(如Jupyter Notebook)中,__file__
可能未定义。此时可以使用Path().absolute()
或其他适用于交互式环境的方法。- Jupyter Notebook中
__file__
不符合预期:在Jupyter Notebook中,__file__
不会返回预期的值,可以使用%cwd
、Path.cwd()
或 Path(sys.path[0])
来获取路径。