如何处理从不同目录导入的.py文件的路径?

时间:2019-10-09 02:38:48

标签: python python-3.x

我的项目结构如下:

- src/
    - script.py
    - data/
        - tools.py
        - datastuff.py
- data/
    - raw/

script.pydatastuff.py都可以单独运行,并且都可以导入tools.py。在tools.py内部,读取了项目中其他位置的文件。例如:

raw_data_path = path.join(os.getcwd(), "../..", "data", "raw")

这在我运行datastuff.py时有效,但在我运行script.py时无效。在data/raw/中引用tools.py的正确方法是什么,以使其在所有情况下都有效?

1 个答案:

答案 0 :(得分:1)

我相信您要问的是如何处理因您拨打电话的位置而导致的路径关系不同的问题。在这种情况下,一种方法是找到项目的父目录,然后将所有文件调用从该位置作为基础。

给出以下项目结构

├── data
│   └── raw
└── src
    ├── data
    │   ├── datastuff.py
    │   └── __init__.py
    ├── __init__.py
    ├── __pycache__
    │   └── __init__.cpython-37.pyc
    └── script.py

确保您的src文件夹具有__init__.py文件。然后将以下代码放入其中;

> from pathlib import Path
> 
> def get_project_root() -> Path:
>     """Returns project root folder."""
>     return Path(__file__).parent.parent

然后,在任何文件中,您都可以使用以下方式访问顶级文件夹:

from src import get_project_root

if __name__ == '__main__':
    root = get_project_root()
    print(root)

您可以使用该知识从任何目录加载文件,并执行以下操作;

from src import get_project_root
import os

if __name__ == '__main__':
    root = get_project_root()
    path_to_raw = os.path.join(root, r"data/raw", "file.txt")
    print(path_to_raw)