当前位置: 首页 > 知识库问答 >
问题:

对在Python中使用相对路径和绝对路径感到困惑吗

阎善
2023-03-14

我有一个名为“test.py”的脚本,引用一个名为“cfg.yaml”的配置文件。这两个位于名为“测试/脚本”的同一个目录中。

test/scripts/test.py
test/script/cfg.yaml

现在我正在“test/data1/data2”内部编写一个bash脚本,名为task.sh

从任务内部。sh,我想调用python脚本

测验sh内容如下:

#!/bin/sh

python ../../scripts/test.py

test.py打开并读取cfg.yaml像open(cfg.yaml),但是当test.sh被调用时,它会失败,因为cfg.yaml没有与相对路径一起引用。我该如何解决这个问题?

共有2个答案

松智勇
2023-03-14

如果要根据文件相对于脚本的相对位置引用文件,则不能仅使用相对路径,因为脚本可能不在当前工作目录中。事实上,在您的情况下,它保证不在当前工作目录中。

像往常一样快

import os
import sys

scriptdir = os.path.abspath(os.path.dirname(sys.argv[0]))

sys。argv[0]是脚本的全名,在大多数平台上,它表示绝对路径,或者至少在此时仍然有效的相对路径。如果您担心其他平台,您可能需要查看\uuuuu文件\uuuuu。当然,如果您使用zipfile或类似文件运行脚本,那么这两个文件都不会有用

open(os.path.join(scriptdir, "cfg.yaml"))

(如果愿意,您甚至可以强制os.chdir(scriptdir),但如果您接受用户的路径名,这可能是个坏主意。)

正确的解决方案是编写要安装的脚本和数据文件(即使您实际上没有安装任何东西并从源代码树中运行),然后使用pkg_资源查找数据文件。这也将为你解决很多其他问题,但首先需要更多的学习。如果您想开始这条路,请参阅Python打包用户指南,并将数据和数据文件打包为特定的起点。

卓新知
2023-03-14

试试看

#!/bin/sh

cd ../../scripts
python test.py

我在测试中假设。py您正在使用一个本地路径引用yaml,该路径期望脚本从脚本目录运行(而不是从data1/data2

另外,您可以始终printos.getcwd(),以查看您的工作目录,同时运行python脚本(或只是bash中的pwd

 类似资料:
  • 主要内容:什么是当前工作目录,什么是绝对路径与相对路径,Python处理绝对路径和相对路径在介绍绝对路径和相对路径之前,先要了解一下什么是当前工作目录。 什么是当前工作目录 每个运行在计算机上的程序,都有一个“当前工作目录”(或 cwd)。所有没有从根文件夹开始的文件名或路径,都假定在当前工作目录下。 注意,虽然文件夹是目录的更新的名称,但当前工作目录(或当前目录)是标准术语,没有当前工作文件夹这种说法。 在 Python 中,利用 os.getcwd() 函数可以取得当前工作路径的字

  • 在 Linux 中,简单的理解一个文件的路径,指的就是该文件存放的位置,例如,在《 Linux文件系统的层次结构》中提到的 /home/cat 就表示的是 cat 文件所存放的位置。只要我们告诉 Linux 系统某个文件存放的准确位置,那么它就可以找到这个文件。 指明一个文件存放的位置,有 2 种方法,分别是使用 绝对路径和 相对路径。 我们知道,Linux 系统中所有的文件(目录)都被组织成以根

  • 本文向大家介绍Linux 相对路径和绝对路径的使用,包括了Linux 相对路径和绝对路径的使用的使用技巧和注意事项,需要的朋友参考一下 01. 概述 绝对路径和相对路径在shell环境中经常遇到,各有用处。有时候相对路径比较方便,有时候绝对路径比较方便。 02. 绝对路径(Absolute Pathname) 绝对路径必定由**/**开头 绝对路径是为档案/文件的所在位置做指向 在任何时候,都可以

  • 问题内容: 如果使用绝对路径,则无法将整个目录移动到新位置。如果使用相对路径,则无法将单个文件移动到新位置。 这里有什么解决方案?您是否设置了一个包含根路径并从那里开始的配置文件?还是您有类似的规则:永不移动文件? 我在某些项目中看到人们使用dirname( FILE )。我的意思是,为什么不简单地将其删除,因为目录名还是相对的(取决于文件所在的位置)? 问题答案: 您应该使用一个配置文件,该配置

  • 问题内容: 我正在编写一个程序,其中的一个组件必须能够采用给定的路径(例如或)和基于该位置的相对路径(例如或或)并产生绝对路径由相对路径暗示。考虑以下目录树。 该文件包含一个链接,如。该计划获得通过或,并将其与结合来获得。 同样,文件具有链接,程序需要从该链接返回。有合理的方法做到这一点吗? 谢谢。:) 编辑: 谢谢斯蒂芬·温伯格!对于未来的每个人,这是我使用的代码。 问题答案: 在与使用时应该做

  • 问题内容: 节点中是否有类似“ path.resolve”的API?还是有什么可以做的? 例如(nodejs代码): 应该得到: 问题答案: 解决(表示用户的家)是另一回事,通常是由外壳来解决。。 如果要通过Go代码执行此操作,则可以使用该函数获取有关当前用户的详细信息,包括其主文件夹(即)。但是,您仍然必须自己替换它。 原始答案如下。 您可以使用或。 例如: 输出: 您可以使用和从路径中“删除”