不明白 os.path.dirname() 是如何工作的
Don't understand how os.path.dirname() work
我是 Python 世界的新手,想知道是否有人可以解释这行代码?
我知道它把目标文件的目录添加到sys.path,但不知道它是怎么回事。
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
让我们从解释一些事情开始:
__file__
是一个 Python 内置。它产生当前执行脚本的绝对路径。
os.path.dirname
returns 给定路径名的目录,例如如果给定输入 /a/b/c/d
,它将产生 /a/b/c
.
sys.path
是一个目录列表,Python 将在您尝试导入某些内容时用于搜索模块。
os.path.dirname(__file__)
returns 当前正在执行的脚本的父目录(即 ../
)
os.path.dirname(os.path.dirname(__file__))
returns当前正在执行的脚本的父目录的父目录。 (即 ../../
)
os.path.append(os.path.dirname(os.path.dirname(__file__)))
会将当前执行脚本的父目录的父目录注册为查找新模块的地方。
所以,假设我们有以下目录结构:
a
|- b
|- c
|-----d
| |----e
| | |---- f
| | | |- main.py
| | |- bar.py
| |- foo.py
|- foobar.py
如果包含此代码的脚本是 main.py
,则最终结果将是 sys.path.append('/a/d/e')
,因此您可以执行 import bar
(但不能执行 import foo
或 import foobar
)
我是 Python 世界的新手,想知道是否有人可以解释这行代码?
我知道它把目标文件的目录添加到sys.path,但不知道它是怎么回事。
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
让我们从解释一些事情开始:
__file__
是一个 Python 内置。它产生当前执行脚本的绝对路径。os.path.dirname
returns 给定路径名的目录,例如如果给定输入/a/b/c/d
,它将产生/a/b/c
.sys.path
是一个目录列表,Python 将在您尝试导入某些内容时用于搜索模块。
os.path.dirname(__file__)
returns 当前正在执行的脚本的父目录(即 ../
)
os.path.dirname(os.path.dirname(__file__))
returns当前正在执行的脚本的父目录的父目录。 (即 ../../
)
os.path.append(os.path.dirname(os.path.dirname(__file__)))
会将当前执行脚本的父目录的父目录注册为查找新模块的地方。
所以,假设我们有以下目录结构:
a
|- b
|- c
|-----d
| |----e
| | |---- f
| | | |- main.py
| | |- bar.py
| |- foo.py
|- foobar.py
如果包含此代码的脚本是 main.py
,则最终结果将是 sys.path.append('/a/d/e')
,因此您可以执行 import bar
(但不能执行 import foo
或 import foobar
)