15  Python 路径设置

在 Python 数据分析和科学计算项目中,文件路径的设置是最容易被初学者忽视但又至关重要的一个环节。路径的写法直接关系到数据能否顺利读取、结果能否正确保存、代码能否方便迁移和团队协作。

假设有如下常见的项目结构:

project/
├── data/
│    └── train.csv
├── scripts/
│    └── 02_regress.ipynb
├── 01_data_clean.ipynb
└── README.md

15.1 路径的基本类型

  • 绝对路径 直接写明从磁盘根目录开始的完整路径,如 C:/Users/lian/project/data/train.csv。优点是直观,缺点是只能在自己的电脑上用,可移植性很差。

  • 相对路径 以「当前工作目录」为起点的路径,写法更灵活,比如 data/train.csv./data/train.csv../data/train.csv。团队协作和跨平台推荐使用相对路径。

15.1.1 路径中的常用符号

  • . 表示当前目录
  • .. 表示上一级目录
  • / 是路径分隔符,推荐在所有平台上都用 /(Windows 也支持)

15.1.2 当前工作目录

Python 在读取文件时,所有相对路径都是以当前工作目录为基准。 你可以用如下代码查看:

import os
print(os.getcwd())

如果你在 project/ 目录下打开并运行 .ipynb.py 文件,那么:

  • data/train.csv
  • ./data/train.csv

这两种写法都表示访问 project/data/ 目录下的 train.csv 文件。

15.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')

15.3 路径设置方法

基本原则

  • 使用相对路径,并以项目主目录作为入口,这样团队成员和后续自动化运行都不会因路径错乱而报错。
  • 不要随意修改当前工作目录,如果确实需要,可以用 os.chdir(),但推荐只在顶层脚本中使用。
  • 建议统一用 / 做路径分隔符,避免不同操作系统兼容性问题。

15.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'

15.3.2 Jupyter Notebook、VS Code 下的路径问题

  • Jupyter Notebook 的当前工作目录一般为你启动 Notebook 时所在的文件夹。
  • VS Code 运行时,也以「打开文件夹」为当前工作目录。
  • 路径错误时优先检查 os.getcwd() 输出。

15.4 应用

15.4.1 批量读取目录下文件

如果要读取 data/ 目录下所有 csv 文件:

import glob
files = glob.glob('data/*.csv')
for f in files:
    print(f)

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

15.5 路径设置最佳实践

  • 明确项目目录结构,所有数据、脚本、输出分目录管理。
  • 路径全部写成相对路径,推荐以项目主目录为基准。
  • 多人协作时保证路径一致,避免硬编码本地绝对路径。
  • 重要脚本和 Notebook 开头加一句 print(os.getcwd()),方便调试和定位路径问题。
  • 文件找不到,多半是路径写错或者工作目录理解有误。 用 os.getcwd() 确认,再对照实际项目结构检查路径。
  • 不同系统分隔符问题,统一用 /,或用路径拼接函数自动处理。

15.6 参考资料