写爬虫或者定时任务,第一次往 data/logs/2026-10 这种多级目录里存文件,直接一个 FileNotFoundError,提示父目录不存在。python创建文件夹用 os.makedirs 一条命令,整条路径一次建好,这是最常见的解法。

os.makedirs 和 os.mkdir 的区别

os.mkdir 只能建最后一级,父目录不存在就报错。os.makedirs 会把缺失的上级目录一路补齐:

import os; os.makedirs('data/logs/2026-10', exist_ok=True)

关键是 exist_ok 这个参数。目录已经存在时,不加它会抛 FileExistsError,定时任务第二次跑就崩;加上 exist_ok=True,存在就跳过,脚本可以放心重复执行。

pathlib 的写法更顺眼

python 3.4 之后推荐 pathlib,路径拼接和建目录都更直观,新项目里一般直接用这套:

from pathlib import Path; Path('output/images').mkdir(parents=True, exist_ok=True)

parents=True 等价于补齐父目录,exist_ok 含义一样。这两个模块都能干python创建文件夹这件事,选顺手的就行。

几个常见的坑

  • Windows 路径里写反斜杠会被当成转义字符,要么统一用正斜杠 C:/data,要么在字符串前加 r 让它保持原始含义。
  • 权限不够报 PermissionError,服务器上多半是运行账号对目标目录没有写权限,别上来就 chmod 777。
  • 批量建目录可以先拼好名字再循环,比如按日期生成 data/2026/10/31 三级结构,一行循环搞定全年的目录。

还有一点容易忽略:目录建好不等于能写入,磁盘满、路径里有特殊字符、文件名撞上系统保留字,同样会失败,报错信息要整个看完再动手。

简单判断:只建一级目录,mkdir 就够;路径可能缺好几级、或者脚本要反复跑,直接 makedirs 加 exist_ok=True,一行顶三行。