14 Python 路径设置
在 Python 数据分析和科学计算项目中,文件路径的设置是最容易被初学者忽视但又至关重要的一个环节。路径的写法直接关系到数据能否顺利读取、结果能否正确保存、代码能否方便迁移和团队协作。
假设有如下常见的项目结构:
project/
├── data/
│ └── train.csv
├── scripts/
│ └── 02_regress.ipynb
├── 01_data_clean.ipynb
└── README.md
14.1 路径的基本类型
绝对路径 直接写明从磁盘根目录开始的完整路径,如
C:/Users/lian/project/data/train.csv。优点是直观,缺点是只能在自己的电脑上用,可移植性很差。相对路径 以「当前工作目录」为起点的路径,写法更灵活,比如
data/train.csv、./data/train.csv或../data/train.csv。团队协作和跨平台推荐使用相对路径。
14.1.1 路径中的常用符号
.表示当前目录..表示上一级目录/是路径分隔符,推荐在所有平台上都用/(Windows 也支持)
14.1.2 当前工作目录
Python 在读取文件时,所有相对路径都是以当前工作目录为基准。 你可以用如下代码查看:
import os
print(os.getcwd())如果你在 project/ 目录下打开并运行 .ipynb 或 .py 文件,那么:
data/train.csv./data/train.csv
这两种写法都表示访问 project/data/ 目录下的 train.csv 文件。
14.2 子目录和上级目录的写法
如果你在 scripts/02_regress.ipynb 中想读取 data/train.csv:
- 路径写法应为
../data/train.csv表示从scripts/目录返回上一层(即project/),再进入data/。
例子:
import pandas as pd
df = pd.read_csv('../data/train.csv')如果在 project/ 目录下运行 01_data_clean.ipynb:
df = pd.read_csv('data/train.csv')14.3 路径设置方法
基本原则
- 使用相对路径,并以项目主目录作为入口,这样团队成员和后续自动化运行都不会因路径错乱而报错。
- 不要随意修改当前工作目录,如果确实需要,可以用
os.chdir(),但推荐只在顶层脚本中使用。 - 建议统一用
/做路径分隔符,避免不同操作系统兼容性问题。
14.3.1 动态拼接路径的安全写法
Python 推荐用 os.path.join() 或 pathlib.Path 自动拼接路径,增强可移植性:
import os
path = os.path.join('data', 'train.csv')或用 pathlib:
from pathlib import Path
path = Path('data') / 'train.csv'14.3.2 Jupyter Notebook、VS Code 下的路径问题
- Jupyter Notebook 的当前工作目录一般为你启动 Notebook 时所在的文件夹。
- VS Code 运行时,也以「打开文件夹」为当前工作目录。
- 路径错误时优先检查
os.getcwd()输出。
14.4 应用
14.4.1 批量读取目录下文件
如果要读取 data/ 目录下所有 csv 文件:
import glob
files = glob.glob('data/*.csv')
for f in files:
print(f)14.4.2 数据导入与结果保存范例
import pandas as pd
df = pd.read_csv('data/train.csv') # 项目主目录下执行
df = pd.read_csv('../data/train.csv') # scripts 子目录下执行
# 保存分析结果到 output 文件夹
df.to_csv('output/result.csv', index=False)14.5 路径设置最佳实践
- 明确项目目录结构,所有数据、脚本、输出分目录管理。
- 路径全部写成相对路径,推荐以项目主目录为基准。
- 多人协作时保证路径一致,避免硬编码本地绝对路径。
- 重要脚本和 Notebook 开头加一句
print(os.getcwd()),方便调试和定位路径问题。 - 文件找不到,多半是路径写错或者工作目录理解有误。 用
os.getcwd()确认,再对照实际项目结构检查路径。 - 不同系统分隔符问题,统一用
/,或用路径拼接函数自动处理。