我有一个大型 python 项目,其中数据太大,无法每次都以相同的方式共享。不同的人可能会使用网络位置或将某些内容复制到本地驱动器。该路径由不同子文件夹中的脚本和笔记本使用。
例如,我将创建一个
config.py
来定义数据文件夹的路径。
import sys
sys.path.append('../')
from config import DATA_PATH
这有效 直到 我重新组织一个项目然后我发现自己在数点并浏览每个笔记本。有没有一种方法可以不使用绝对路径来可靠地获取项目文件夹中的配置,从而允许我组织子文件夹,这些子文件夹有时可以是另一层深度而不更改所有文件?
project/
├── __init__.py
├── config.py
├── scripts/
│ ├── __init__.py
│ └── some_script.py
└── notebooks/
├── __init__.py
└── some_notebook.ipynb
你可以使用 Python 的
os.path
模块,结合一些相对路径技巧,从你的项目中的任何位置可靠地获取你的配置文件。
以下是方法:
-
使用
__init__.py
文件使你的目录成为包。 这使得 Python 可以将你的project
目录及其子目录识别为包。 -
在你的
config.py
中定义DATA_PATH
。 你可以使用os.path.abspath(__file__)
获取config.py
文件的绝对路径,然后导航到你的数据目录。
```python import os
# 获取 config.py 的目录路径 CONFIG_DIR = os.path.dirname(os.path.abspath( file ))
# 定义数据路径 - 这里假设数据目录与 config.py 在同一级别 DATA_PATH = os.path.join(CONFIG_DIR, 'data') ```
-
从你的脚本和笔记本中导入
DATA_PATH
。 现在你可以从你的项目中的任何位置导入config
模块,并访问DATA_PATH
。
```python from project.config import DATA_PATH
# 在你的脚本或笔记本中使用 DATA_PATH print(f"正在从 {DATA_PATH} 加载数据...") ```
示例:
project/ init .py (此文件为空)
project/config.py
import os
CONFIG_DIR = os.path.dirname(os.path.abspath(__file__))
DATA_PATH = os.path.join(CONFIG_DIR, 'data')
project/scripts/some_script.py
from project.config import DATA_PATH
print(f"正在从 {DATA_PATH} 加载数据...")
project/notebooks/some_notebook.ipynb
from project.config import DATA_PATH
print(f"正在从 {DATA_PATH} 加载数据...")
优点:
- 无需绝对路径: 你的代码现在引用项目的根目录,使其可移植。
- 组织有序: 你可以自由地重构项目结构,而无需更新每个文件的路径。
-
可读性:
导入
config.DATA_PATH
使你的代码更易于理解和维护。
使用此方法,你可以确保你的项目始终可以找到你的数据目录,无论项目的内部结构如何。
标签:python,path From: 78808533