最推荐使用pathlib.Path(__file__).resolve().parent获取脚本所在目录,它在Python 3.4+中提供面向对象、跨平台且可读性强的路径操作,能可靠解析绝对路径并返回父目录,优于传统的os.path.dirname(os.path.abspath(__file__))方法。

在Python中获取脚本所在的目录,最直接且推荐的方式是结合
os.path
abspath
dirname
os.path.dirname(os.path.abspath(__file__))
pathlib
pathlib.Path(__file__).resolve().parent
要获取当前Python脚本文件所在的目录,我们可以依赖Python内置的
__file__
__file__
使用 os.path
这是最传统也是最常用的方法。
立即学习“Python免费学习笔记(深入)”;
import os
# 1. 获取当前脚本文件的绝对路径
# __file__ 变量包含了当前脚本的路径,但它可能是相对路径。
# os.path.abspath() 会将其转换为绝对路径。
script_path = os.path.abspath(__file__)
# 2. 从绝对路径中提取目录部分
# os.path.dirname() 用于获取给定路径的目录名。
script_directory = os.path.dirname(script_path)
print(f"脚本的完整路径: {script_path}")
print(f"脚本所在的目录 (os.path): {script_directory}")
# 简洁写法:
# script_directory_concise = os.path.dirname(os.path.abspath(__file__))
# print(f"脚本所在的目录 (os.path 简洁): {script_directory_concise}")使用 pathlib
pathlib
from pathlib import Path
# 1. 创建一个Path对象表示当前脚本文件
# Path(__file__) 创建一个Path对象。
# .resolve() 方法类似于 os.path.abspath(),它会解析路径中的所有符号链接并返回绝对路径。
script_path_obj = Path(__file__).resolve()
# 2. 获取Path对象的父目录
# .parent 属性直接返回Path对象的父目录。
script_directory_obj = script_path_obj.parent
print(f"脚本的完整路径 (pathlib): {script_path_obj}")
print(f"脚本所在的目录 (pathlib): {script_directory_obj}")
# 如果需要字符串形式的路径:
# script_directory_str = str(script_directory_obj)
# print(f"脚本所在的目录 (pathlib 字符串): {script_directory_str}")两种方法都能有效解决问题,
pathlib
__file__
__file__
当你直接运行一个脚本,比如
python my_script.py
__file__
my_script.py
my_script.py
python /path/to/my_script.py
__file__
/path/to/my_script.py
然而,当你的脚本作为模块被导入时,
__file__
.py
.pyc
更需要注意的是,在一些特殊场景下,
__file__
__file__
exec()
__file__
<string>
所以,我们不能盲目地相信
__file__
os.path.abspath(__file__)
Path(__file__).resolve()
abspath
resolve()
不加处理直接使用
os.path.dirname(__file__)
__file__
abspath
resolve
dirname
.parent
__file__
os.path
pathlib
在Python中处理文件路径,我们有
os.path
pathlib
os.path
os.path.join()
+
os.path.join()
os.path.dirname()
os.path.basename()
os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data', 'config.json')
而
pathlib
Path
.parent
.name
.suffix
/
Path(__file__).parent / 'data' / 'config.json'
Path
\
/
pathlib
.exists()
.is_file()
.mkdir()
.touch()
.read_text()
.write_bytes()
对我来说,只要项目允许,我几乎总是倾向于使用
pathlib
/
os.path
pathlib
编写Python脚本时,我们常常希望它能在不同的操作系统上无缝运行,而路径处理就是其中一个常见的跨平台挑战。Windows、Linux和macOS在文件系统路径的表示和行为上存在一些关键差异,如果处理不当,脚本可能在一个系统上运行良好,在另一个系统上却报错。
最明显的差异莫过于路径分隔符。Windows使用反斜杠
\
C:\Users\Admin\Documents
/
/home/user/documents
os.path
pathlib
os.path.join()
pathlib
Path
/
Path('my_dir') / 'my_file.txt'my_dir\my_file.txt
my_dir/my_file.txt
另一个需要注意的点是文件系统大小写敏感性。Linux和macOS(默认情况下)的文件系统是大小写敏感的,
MyFile.txt
MyFile.txt
MyFile.txt
MyFile.txt
MyFile.txt
MyFile.txt
FileNotFoundError
Windows特有的盘符也是一个差异。Linux和macOS的文件系统是统一的根目录
/
C:
D:
os.path.abspath()
pathlib.Path().resolve()
为了确保路径获取的跨平台兼容性,关键在于始终使用Python提供的抽象层:
os.path.dirname(os.path.abspath(__file__))
Path(__file__).resolve().parent
os.path.join()
pathlib
/
os.path.realpath()
pathlib.Path().resolve()
通过遵循这些实践,我们可以大大减少因操作系统差异导致的路径问题,让Python脚本在任何平台上都能稳健地运行。毕竟,编写一次,到处运行,才是Python的魅力所在。
以上就是python如何获取脚本所在的目录_python获取当前执行脚本文件所在路径的详细内容,更多请关注php中文网其它相关文章!
python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号