python如何创建文件夹:两种主流写法对比
python如何创建文件夹,主流方案为os模块mkdir、makedirs函数以及pathlib模块mkdir方法,os.mkdir只能创建单级文件夹,目标上级目录必须提前存在,os.makedirs支持递归创建多级目录,pathlib写法面向对象,代码可读性更高,你在Windows、macOS、Linux平台都能运行这三类代码,适用边界是运行脚本的用户账号需要拥有目标路径的写入权限,只读权限账号执行代码会抛出权限异常,路径包含中文时,Python3环境大多可以正常解析,Python2环境容易出现编码报错。
python创建文件夹os模块用法
os是Python内置模块,不需要额外安装,导入语句为importos。os.mkdir接收路径字符串作为参数,示例代码os.mkdir("./testdir"),执行后会在脚本同级目录生成testdir文件夹,如果testdir已经存在,这段代码会直接抛出FileExistsError。你可以在参数里加入exist_ok=True,这个参数在os.makedirs中可用,os.mkdir在较低Python版本不支持该参数,开启后文件夹已存在时不会触发报错,程序继续向下执行。
os.makedirs专门用来处理多级目录,示例os.makedirs("./a/b/c",exist_ok=True),这条代码会一次性创建a文件夹、a下面的b文件夹、b下面的c文件夹,不需要逐层手动新建上级目录。路径写法上,Windows系统支持反斜杠,你需要写成双反斜杠或者原始字符串r"C:\data\test",避免转义字符打乱路径识别。
python创建文件夹pathlib模块用法
pathlib在Python3.4版本加入标准库,把路径封装成对象,相比os字符串路径写法,修改、拼接路径更简洁。导入语句frompathlibimportPath,先定义路径对象p=Path("./data/log"),再调用p.mkdir(parents=True,exist_ok=True)。parents=True等价于os.makedirs的递归能力,自动补齐所有不存在的上级文件夹;exist_ok=True控制目录存在时不报错。
| 方法 | 支持多级目录 | 推荐版本 | 典型使用场景 |
|---|---|---|---|
| os.mkdir | 否 | Python全版本 | 只新建单个文件夹,上级目录确定存在 |
| os.makedirs | 是 | Python全版本 | 兼容老旧代码,批量生成多层目录 |
| pathlib.Path.mkdir | 是 | Python3.4+ | 新项目,路径后续还要拼接文件名、判断是否存在 |
优先选pathlib。
路径可以使用绝对路径和相对路径,相对路径以当前脚本运行目录为基准,不是py文件存放目录,如果你用命令行在别的文件夹启动脚本,相对路径指向位置会发生变化,这个差异是高频出错点,你需要用os.getcwd()打印当前工作目录确认位置。
捕获异常可以提升脚本稳定性,你可以搭配tryexcept结构捕获FileExistsError、PermissionError、FileNotFoundError。PermissionError代表账号没有写入权限,服务器、C盘根目录这类位置很容易触发这个异常,FileNotFoundError只会在os.mkdir且上级目录缺失的时候出现。
不要直接把用户输入的原始字符串拼接成路径,该操作有路径穿越风险,如果你程序需要接收外部传入路径,优先使用pathlib的路径拼接接口,过滤掉../这类跳转字符,降低目录被定向到系统敏感位置的概率。
文件夹创建完成后,你可以搭配is_dir()判断目标路径是不是文件夹,区分同名文件和文件夹,如果路径位置已经有一个同名文件,创建文件夹的代码同样会抛出异常,这个场景下exist_ok参数无法规避报错。
临时文件夹需求可以使用tempfile标准库,它会自动生成唯一名称的目录,程序结束后还能选择自动清理,适合缓存、中转数据场景,不用手动命名和删除目录。
