如何用Python无需循环简洁实现类似Unix mkdir -p的嵌套多目录创建
Python 实现类shell
mkdir -p a/b/c/{d,e,f} 效果的解决方案 问题原因说明
你之前的写法只能创建单个目标路径,而Unix shell的mkdir -p a/b/c/{d,e,f}实际是shell先将大括号语法展开为a/b/c/d、a/b/c/e、a/b/c/f三个独立路径,再调用mkdir批量创建,Python原生的os.makedirs和pathlib.Path.mkdir都没有内置shell大括号语法解析能力,所以无法直接实现对应效果。
方案1:标准库无依赖实现(无显式循环)
不需要引入第三方库,也不需要写多行for循环代码块,用生成器表达式一行即可完成批量创建:
from pathlib import Path # 按需修改基础路径和子目录列表即可 any((Path("a/b/c") / subdir).mkdir(mode=0o755, parents=True, exist_ok=True) for subdir in ["d", "e", "f"])
说明:any仅用于消费生成器执行创建逻辑,无实际返回值意义;parents=True会自动创建不存在的上层目录,exist_ok=True避免目录已存在时报错。
方案2:完全复刻shell大括号写法(需少量第三方依赖)
如果要完全复用shell风格的大括号路径写法,可以安装braceexpand库实现语法解析,代码更简洁:
- 先安装依赖:
pip install braceexpand - 执行创建:
from pathlib import Path from braceexpand import braceexpand any(Path(p).mkdir(mode=0o755, parents=True, exist_ok=True) for p in braceexpand("a/b/c/{d,e,f}"))
该写法支持任意层级的大括号嵌套,和shell的大括号展开逻辑完全一致。
内容的提问来源于stack exchange,提问作者Ram Ghadiyaram
相关产品推荐
相关产品推荐

