【问题标题】:How to get Python to run a submodule from that submodule's path for relative paths?如何让 Python 从该子模块路径运行子模块以获取相对路径?
【发布时间】:2019-07-01 20:04:26
【问题描述】:

我有一个文件目录非常复杂的项目。

    project/
        scripts/
            scriptA.py
            ...
        data/
            A.csv
            ...

scripts\ 中的文件将修改data\ 中的内容。实际的结构是更加嵌套和复杂的。这目前工作正常,因为我正在单独测试每个文件,但我想在根目录中包含一个run.py,它将运行所有相关脚本。

但是,scriptA.py 等都是用 ../data/A.csv 这样的相对路径编写的,这意味着 run.py 不会运行。解决此问题的最佳方法是什么?我已经查看了 Python 的 __file__,但我仍然不确定如何将它用于我的目的。

【问题讨论】:

  • 如果在根目录下,../../data/abc.csv 应该可以工作或将 script/ 添加到您的路径 import sys.path.insert(0,'/path/to/script')
  • @PraysonW.Daniel 我是否必须为每个脚本都这样做?我是在开始时一次性完成,还是包括在内,运行相应的脚本并重复?
  • 这取决于您的用例。如果您希望在根目录下的所有脚本中都有它,那么我会做一些不同的事情。我会创建一个__init__.py 文件st root 并导入所有必要的路径。这意味着我不必更改我的 run.py,因为所有路径都在初始化中加载。

标签: python directory path


【解决方案1】:

如果您使用的是 Python 3,我会这样做:

# This is scriptA.py
from pathlib import Path

script_a = Path(__file__)
scripts_dir = script_a.parent
project_dir = scripts_dir.parent
data_dir = project_dir / 'data'
a_csv = data_dir / 'A.csv'

with a_csv.open():
    # Some work on the file

你可能不会真的把它分解成一堆不同的变量,我只是为了说明而这样做。查看pathlib docs 了解更多信息。

【讨论】:

    猜你喜欢
    • 2018-03-30
    • 1970-01-01
    • 2017-05-01
    • 2018-06-08
    • 2017-08-10
    • 1970-01-01
    • 2010-09-21
    • 2014-05-31
    相关资源
    最近更新 更多