- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在几个 SO 的问题中,有这些行可以访问代码的父目录,例如os.path.join(os.path.dirname(__file__)) returns nothing和 os.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.py
和 script2/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 个常量:
abspath
返回路径的绝对路径join
加入路径字符串dirname
返回文件的目录__file__
指的是脚本
的文件名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/
我知道 abspath 可以获取一个文件或一组相关文件,并通过在当前目录前添加它们来为它们创建完整路径,如以下示例所示: >>> os.path.abspath('toaster.txt.') 'C:
我目前正在从头开始构建 WordPress 主题,作为“在工作中学习”的一种方式。我在后端工作方面的经验一般,尽管过去我一直非常依赖 PageBuilders。我现在希望创建一个没有任何 Pagebu
鉴于此代码: function main() println("hello") end if abspath(PROGRAM_FILE) == @__FILE__ main() end
我一直在尝试在同一服务器上创建自定义 WP/WooCommerce 网站的虚拟副本。 我已成功将文件移动到子域并创建了临时数据库副本并更新了 wp_config 文件,但我无法弄清楚如何设置 ABSP
通过阅读 stackoverflow 我发现 __file__ 是从中加载模块的文件的路径名,如果它是从文件加载的话 这行代码有什么原因吗? os.path.abspath(__file__) 文档指
也许这个问题很明显,所以请原谅。 我想执行shell命令(Windows 8.1,Python 3.4)来打开带有SVG文件的IE。我这样做是这样的: # imgpath = 'C:/Users/Vl
运行 cygwin perl 时,有没有办法从 cygwin 路径获取 DOS 绝对路径? 理想情况下,它还可以解析 cygwin 符号链接(symbolic link)。 例如。: '/cygdri
我正在尝试在 foldersystem 中使用 os.walk() 找到几个 'my_file.bat',如果文件名匹配它应该用 subprocess.call() 或 .run() 调用。问题是 o
如果我有这样的结构: root/ -- group1/ ---- names/ ---- places/ ------ foo.zip 为什么当我调用 os.path.abspath('foo.zip
我正在尝试将相对路径扩展为绝对路径。相对路径有时会包含一个 . ,它需要从当前工作目录中扩展出来。我想知道 Python 中的任何标准函数是否接受 cwd kwarg,就像 subprocess.po
我不认为我遗漏了什么。话又说回来,我还是个新手。 def GET(self, filename): name = urllib.unquote(filename) full = pat
我有以下包含文件绝对目录的字符串。 'D:\Sample\Project\testXcl\data.xlsx' 将其传递给 os.path.abspath 后,我得到以下结果: 'D:\\Sample
假设文件“file1.txt”的路径是 /home/bentley4/Desktop/sc/file1.txt假设我当前的工作目录是 /home/bentley4 import os os.path.
它们在字符串值上是相等的,但它们真的相等吗?发生了什么事? import os path_name1 = os.path.abspath(os.path.dirname(__file__)) path
我想知道 python 脚本的绝对路径,然后执行以下步骤。 通过 py_compile 将其构建为字节码。 执行它来检查绝对路径。 但是当我执行它时,我得到了2个结果。我发现基于脚本路径的结果后跟py
我在运行 python 脚本(由 ./waf --run 调用)时遇到此错误:TypeError: abspath() 恰好接受 1 个参数(给定 2 个) 问题是它确实被调用了:obj.path.a
在多个开源项目中,我见过有人用os.path.abspath(os.path.realpath(__file__))来获取当前文件的绝对路径。 但是,我发现 os.path.abspath(__fil
我正在使用 os 模块在我的 Django 项目 settings.py 文件中具有相对路径。变量 SITE_ROOT 设置为 settings.py 文件的当前工作目录,然后用于引用同样位于同一目录
在 Python 中,如果路径中包含“~”,我能否确定扩展的用户调用将是绝对路径? 例如,这个表达式是否总是为真? path = '~/.my_app' os.path.expanduser(path
我是 Django 项目的初学者。Django 项目的 settings.py 文件包含这两行: BASE_DIR = os.path.dirname(os.path.dirname(os.path.
我是一名优秀的程序员,十分优秀!