gpt4 book ai didi

python - os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir)) 是什么意思? Python

转载 作者:太空狗 更新时间:2023-10-29 17:21:48 31 4
gpt4 key购买 nike

在几个 SO 的问题中,有这些行可以访问代码的父目录,例如os.path.join(os.path.dirname(__file__)) returns nothingos.path.join(os.path.dirname(__file__)) returns nothing

import os, sys
parentddir = os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir))
sys.path.append(parentddir)

我知道 os.path.abspath() 返回某物的绝对路径,而 sys.path.append() 添加代码访问的路径。但是下面这条神秘的线是什么,它的真正含义是什么?

os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir))

是否有另一种方法可以达到相同的目的,将代码附加到父目录?

发生这个问题是因为我跨目录调用函数,有时它们共享相同的文件名,例如script1/utils.pyscript2/utils.py。我正在从 script1/test.py 调用一个函数,它调用 script2/something.py 包含一个调用 script2/utils.py 的函数,并且以下代码

script1/
utils.py
src/
test.py

script2/
utils.py
code/
something.py

测试.py

from script2.code import something
import sys
sys.path.append('../')
import utils

something.foobar()

something.py

import os, sys
parentddir = os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir))
sys.path.append(parentddir)
import utils

def foobar():
utils.somefunc()

最佳答案

无论脚本位置如何,这是一种引用路径的巧妙方法。您所指的神秘行是:

os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir))

存在 3 个方法和 2 个常量:

  1. abspath 返回路径的绝对路径
  2. join 加入路径字符串
  3. dirname 返回文件的目录
  4. __file__ 指的是脚本的文件名
  5. pardir 返回操作系统中父目录的表示(通常是 ..)

因此,该表达式以多平台安全 方式返回执行脚本的完整路径名。无需硬接线任何方向,这就是它如此有用的原因。

可能还有其他方法可以获取文件所在的父目录,例如,程序有当前工作目录的概念,os.getcwd()。所以做 os.getcwd()+'/..' 可能会起作用。但这是非常危险的,因为工作目录可以更改。

此外,如果要导入文件,工作目录将指向导入文件,而不是导入者,但 __file__ 始终指向实际模块的文件,因此更安全。

希望这对您有所帮助!

编辑: - Python 3 让我们以面向对象的方式处理路径,从而大大简化了这种情况,因此上面的行变为:

from pathlib import Path
Path(__file__).resolve().parent.parent

关于python - os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir)) 是什么意思? Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21005822/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com