如何在 Python 中获取当前脚本的目录?
父目录是分层文件系统中另一个文件/目录之上的目录。获取父目录对于执行某些与文件系统管理相关的任务至关重要。在本文中,我们将了解用于获取当前运行的 python 脚本的父目录的方法,并了解每种方法的各种用途/缺点。为了执行上述任务,我们将使用两个名为操作系统和检查的库,这两个库都是内置的,因此不需要任何安装。
出于演示目的,我们将使用位于 C:\suga\Lpath.py 的以下文件。文件的内容(代码)将根据引用它的上下文而改变。
在以下示例中,我们将广泛使用 os.path 模块中的 dirname() 函数。因此,我们最好事先了解一下。
语法: os.path.dirname(路径)
参数:
路径:表示文件系统路径的类似路径的对象。
返回类型:
此方法返回一个字符串,该字符串表示指定路径的父目录的绝对路径
方法 1#: 使用 file 模块对象。
在这个方法中,我们将使用 file(用双下划线( dunder )包围的 file 关键字)。这个预定义的属性存在于大多数 python 文件中。该属性用于获取当前正在执行的 python 文件的文件名。我们将通过 file 获得的路径传递给 os.path.dirname() 函数,以便获得 python 文件的父目录。
Python 3
import os
# Displaying the script path
print(__file__)
# Displaying the parent directory of the script
print(os.path.dirname(__file__))
输出:
C:\suga\Lpath.py
C:\suga
缺点:
- 上述方法只有在 python 脚本中使用时才有效。因此,如果从交互式环境(stdin)或逐行解释器(调试)运行,它将不起作用。
- file 不会出现在静态链接的 C 模块中(最初用 C 编写但移植到 python 的库)
- __ 文件 _ _ 不会在内置模块中定义
方法 2#: 使用 sys.argv[0]命令行参数
sys.argv 是一个包含传递给 python 程序的命令行参数的列表。在这个方法中,我们将使用 sys.argv 列表的第 0 个参数,即当前正在执行的 python 文件的路径,来获取 python 脚本的父目录。
Python 3
import sys
print(os.path.dirname(sys.argv[0]))
输出:
C:\suga
缺点:
- 只有在 python 脚本中使用 sys.argv[0] 时,上述方法才有效。它对原始性病不起作用,例如。从 python 命令行解释器(IDLE)运行命令。
- 上述方法是基于参数的,因此,如果 python 脚本以特定的方式运行,使得第一个参数(位于索引 0 处)不是可执行文件的文件名,则该方法将不起作用。《出埃及记》如果使用命令“ py Lpath.py 运行 Lpath.py 文件,将不会显示输出。
方法 3#: 使用 getsourcefile()函数
在这个方法中,我们将使用 inspect 库中的 getsourcefile() 方法来获取当前正在执行的 python 脚本的绝对路径。然后我们将它传递给 os.path.dirname() 函数来获取文件名的父目录。这种方法通常是上述方法中的最佳和兼容的方法,因为它跨平台、规模小(代码行更少),并且在可变的执行环境下工作。
语法: getsourcefile(对象)
参数:
对象:python 脚本中的可引用对象
返回类型:
返回在其中找到对象的文件的完整路径。如果无法在源中识别对象,则返回无。
Python 3
from inspect import getsourcefile
import os
print(os.path.dirname(getsourcefile(lambda:0)))
输出:
C:\suga
说明:
首先,我们导入了 inspect 库中的 getsourcefile() 函数。之后我们导入了 os 库,用于使用在中找到的 os.path.dirname() 函数,该函数将用于从脚本文件名中提取父目录。我们提供了 lambda:0 作为 getsourcefile() 函数的参数,因为它需要 python 脚本中的一个引用对象,因此我们使用 lambda 创建了一个伪函数,只是为了使它能够在 python 脚本中被引用。
注意:如果要在逐行解释器中执行上述代码,可能需要对其进行一点修改(使用自适应函数,而不是 dirname() )。空闲)。但这超出了本文的范围。
版权属于:月萌API www.moonapi.com,转载请注明出处