Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何处理从不同目录导入的.py文件的路径?_Python_Python 3.x - Fatal编程技术网

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

Python 如何处理从不同目录导入的.py文件的路径?,python,python-3.x,Python,Python 3.x,我的项目结构如下: - src/ - script.py - data/ - tools.py - datastuff.py - data/ - raw/ script.py和datastaff.py都可以自己运行,它们都可以导入tools.py。在tools.py的内部,读取项目中其他地方的文件。例如: raw_data_path = path.join(os.getcwd(), "../..", "data", "raw") 这在运

我的项目结构如下:

- src/
    - script.py
    - data/
        - tools.py
        - datastuff.py
- data/
    - raw/
script.py
datastaff.py
都可以自己运行,它们都可以导入
tools.py
。在
tools.py
的内部,读取项目中其他地方的文件。例如:

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

这在运行
datastaff.py
时有效,但在运行
script.py
时无效。在
tools.py
中引用
数据/raw/
的正确方法是什么,以便它在所有情况下都能工作?

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

鉴于以下项目结构

├── data
│   └── raw
└── src
    ├── data
    │   ├── datastuff.py
    │   └── __init__.py
    ├── __init__.py
    ├── __pycache__
    │   └── __init__.cpython-37.pyc
    └── script.py
确保您的src文件夹中有一个_init__u; py.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)
然后,在任何文件中,您都可以使用访问顶级文件夹

> 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)
您可以使用这些知识从任何目录加载文件,执行以下操作:

> 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)

在可执行的.py文件中是否有
if uuuuuuu name\uuuuu=='\ uuuuuuu main\uuuuuu
保护?如果是这样,您可以在
script.py
datastaff.py
中分别指定相对路径。然后将这些相对路径传递给
tools.py
中的函数?我希望处理
tools.py
中的所有路径内容。因此,必须将“path\u to\u raw”从可执行文件传递到“tools.py”中的函数。此外,我在从
src/data/
目录中的文件导入
src
时遇到问题。使用src import get_project_root中的
我得到了错误
ModuleNotFoundError:没有名为'src'的模块