Python中条件化创建多级嵌套文件夹的更优实现方案咨询
Python中条件化创建多级嵌套文件夹的更优实现方案咨询
这个多层嵌套的循环写法确实有点绕,看起来也挺冗余的,我来给你分享几个更简洁、可读性更强的实现思路,完全能满足你的条件化创建需求~
方案一:用itertools.product简化多层循环
首先可以用itertools.product来生成前四层的所有组合,这样就能把嵌套的for循环扁平化,代码结构会清爽很多。然后根据第三层的元素是否为"l",决定是否要追加第五层的路径:
import os from itertools import product base_path = fr"C:\Some_Location" level_1 = ["a", "b", "c"] level_2 = ["d", "e", "f", "g", "h"] level_3 = ["i", "j", "k", "l"] level_4 = ["m", "n"] level_5 = ["o", "p"] # 生成前四层的所有组合 for i, j, k, l in product(level_1, level_2, level_3, level_4): base_subpath = (i, j, k, l) if k == "l": # 当第三层是"l"时,遍历第五层生成完整路径 for m in level_5: full_path = os.path.join(base_path, *base_subpath, m) os.makedirs(full_path, exist_ok=True) else: # 否则直接创建到第四层的路径 full_path = os.path.join(base_path, *base_subpath) os.makedirs(full_path, exist_ok=True)
这里我把os.makedirs的exist_ok=True参数用上了,这样就不用自己写if not os.path.exists(...)的判断了,Python 3.2+就支持这个参数,省了不少重复代码。
方案二:用pathlib实现更优雅的面向对象写法
如果你的Python版本是3.4及以上,非常推荐用pathlib模块,它的API更直观,写法也更贴近我们日常操作路径的习惯:
from pathlib import Path from itertools import product base_path = Path(r"C:\Some_Location") level_1 = ["a", "b", "c"] level_2 = ["d", "e", "f", "g", "h"] level_3 = ["i", "j", "k", "l"] level_4 = ["m", "n"] level_5 = ["o", "p"] for i, j, k, l in product(level_1, level_2, level_3, level_4): current_path = base_path / i / j / k / l # 直接创建路径,parents=True自动创建所有父目录,exist_ok=True忽略已存在的路径 current_path.mkdir(parents=True, exist_ok=True) if k == "l": # 当第三层是"l"时,继续创建第五层的子目录 for m in level_5: (current_path / m).mkdir(exist_ok=True)
这个写法用了路径拼接的/运算符,跟我们在系统里写路径的逻辑完全一致,可读性拉满。而且mkdir的参数帮我们搞定了所有判断和多级创建的细节,代码精简了不少。
为什么这两个方案更好?
- 减少嵌套层级:原代码有5层嵌套,现在最多2层,逻辑一目了然
- 去掉重复代码:用
exist_ok=True替代了手动判断路径是否存在的冗余逻辑 - 可读性更强:
itertools.product和pathlib的写法更符合Python的优雅风格,别人看代码时能快速get你的意图
你可以根据自己的Python版本和使用习惯选其中一个方案,功能上和你原代码完全一致,后续维护起来也方便多啦~
备注:内容来源于stack exchange,提问作者G99
相关产品推荐
相关产品推荐

