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'的模块
。