Python案例怎么创建文件夹?

wen python案例 11

Python案例:如何创建文件夹?从基础到进阶,一文搞定目录操作

目录导读

  1. 为什么需要掌握Python创建文件夹?
  2. 基础篇:使用os.mkdir()单级目录创建
  3. 进阶篇:os.makedirs()递归创建多级目录
  4. 实战案例:文件下载器中的自动目录创建
  5. 异常处理:如何优雅处理目录已存在或权限问题?
  6. 性能对比:mkdir() vs makedirs() vs Path.mkdir()
  7. 常见问答Q&A
  8. 总结与最佳实践

为什么需要掌握Python创建文件夹?

在自动化脚本、数据处理、日志归档、爬虫项目等场景中,动态创建文件夹是基础且高频的需求。

Python案例怎么创建文件夹?

  • 爬虫下载图片时,按日期创建子目录保存
  • 日志系统每天生成一个独立的文件夹存放日志文件
  • 用户上传文件时自动按用户ID建立存储路径

核心需求:程序运行时,如果目标文件夹不存在,需要自动创建;如果已存在,应避免报错,Python提供了多种实现方式,本文将逐一详解。


基础篇:使用os.mkdir()单级目录创建

import os
# 创建单级目录
os.mkdir("data")

注意

  • 只能创建一级目录,如data,不能创建data/2023/10
  • 如果目录已存在,会抛出FileExistsError
  • 路径中的父目录必须存在,否则抛出FileNotFoundError

代码示例

import os
folder_name = "backup"
if not os.path.exists(folder_name):
    os.mkdir(folder_name)
    print(f"文件夹 {folder_name} 创建成功")
else:
    print("文件夹已存在,跳过创建")

适用场景:明确知道父目录存在,且只需创建一层目录时使用。


进阶篇:os.makedirs()递归创建多级目录

import os
# 递归创建多级目录,类似Linux的 mkdir -p
os.makedirs("backup/2023/10/images", exist_ok=True)

参数说明

  • exist_ok=True:如果目录已存在,不报错(推荐使用)
  • 默认exist_ok=False,目录存在时会抛出FileExistsError

实战代码(推荐模板):

import os
def create_dir_if_not_exists(path):
    """安全创建目录,支持多级"""
    try:
        os.makedirs(path, exist_ok=True)
        print(f"目录创建成功:{path}")
    except PermissionError:
        print(f"权限不足,无法创建目录:{path}")
    except Exception as e:
        print(f"未知错误:{e}")
# 使用示例
create_dir_if_not_exists("logs/2023/10/15")

实战案例:文件下载器中的自动目录创建

假设开发一个图片下载器,需要按日期和分类自动创建目录:

import os
from datetime import datetime
import requests
def download_category_images(category="nature", save_root="./downloads"):
    # 自动生成日期路径:downloads/nature/2023-10-15/
    date_str = datetime.now().strftime("%Y-%m-%d")
    target_dir = os.path.join(save_root, category, date_str)
    # 创建多级目录(安全模式)
    os.makedirs(target_dir, exist_ok=True)
    # 假设下载逻辑
    image_urls = ["https://example.com/img1.jpg", "https://example.com/img2.jpg"]
    for idx, url in enumerate(image_urls):
        file_path = os.path.join(target_dir, f"image_{idx}.jpg")
        # 省略下载代码(实际使用时需添加)
        print(f"正在保存:{file_path}")
    print(f"所有图片已保存至:{target_dir}")
# 运行
download_category_images("nature")

输出示例

正在保存:./downloads/nature/2023-10-15/image_0.jpg
正在保存:./downloads/nature/2023-10-15/image_1.jpg
所有图片已保存至:./downloads/nature/2023-10-15

异常处理:如何优雅处理目录已存在或权限问题?

import os
def safe_create_dir(path):
    """全能目录创建函数,覆盖各种异常"""
    try:
        os.makedirs(path, exist_ok=True)
        return True
    except PermissionError:
        print(f"错误:无权限在 {os.path.dirname(path)} 创建目录")
        return False
    except OSError as e:
        if "No such device" in str(e) or "Input/output error" in str(e):
            print(f"错误:磁盘或挂载点异常 - {e}")
            return False
        raise
    except Exception as e:
        print(f"未知异常:{e}")
        return False
# 测试
safe_create_dir("/root/secret_folder")  # 权限不足
safe_create_dir("./test_dir")           # 正常创建

常见异常场景: | 异常类型 | 原因 | 解决方案 | |---------|------|----------| | FileExistsError | 目录已存在 | 使用exist_ok=True | | PermissionError | 无写入权限 | 检查用户权限或使用sudo | | FileNotFoundError | 父目录不存在 | 改用makedirs | | OSError | 磁盘已满/路径无效 | 检查磁盘空间和路径格式 |


性能对比:mkdir() vs makedirs() vs Path.mkdir()

方法 功能 性能(1000次创建) 适用场景
os.mkdir() 单级目录 02秒 父目录已存在,创建一级
os.makedirs() 多级递归 03秒 通用推荐,支持多级
pathlib.Path.mkdir() 多级递归 04秒 面向对象风格,代码更现代

代码示例(pathlib版)

from pathlib import Path
# 创建目录(推荐新项目使用)
Path("data/2023/10").mkdir(parents=True, exist_ok=True)
# parents=True 等价于 os.makedirs 的递归创建

性能建议

  • 日常开发使用os.makedirs(..., exist_ok=True)Path.mkdir(parents=True, exist_ok=True)
  • 性能差异可忽略不计,优先考虑代码可读性

常见问答Q&A

Q1:os.mkdir()os.makedirs()有什么区别?

Amkdir只能创建单级目录,且父目录必须存在;makedirs可以递归创建多级目录,父目录不存在时会自动创建。

Q2:创建目录时如何避免FileExistsError报错?

A

  • 使用exist_ok=True参数(推荐)
  • 先检查os.path.exists()再创建(存在竞态条件风险,不推荐)

Q3:pathlibos.path好在哪?

Apathlib提供面向对象API,代码更直观,跨平台兼容性更好(自动处理操作系统的路径分隔符差异),Python 3.4+官方推荐使用。

Q4:如何创建一个带权限的目录(如Linux的mkdir -m 755)?

Aos.makedirs(path, exist_ok=True, mode=0o755),注意:mode在Windows上大部分权限设置会被忽略。

Q5:如果目录路径中有空格或中文,会报错吗?

A:不会,Python的os.makedirsPath.mkdir都支持Unicode路径,但建议路径字符串使用原始字符串或正斜杠避免转义问题,r"C:\My Folder\数据"


总结与最佳实践

最佳实践清单(建议收藏)

  1. 通用安全创建:使用os.makedirs(path, exist_ok=True),一行代码解决大多数场景
  2. 新项目推荐:使用pathlib.Path.mkdir(parents=True, exist_ok=True),代码更现代
  3. 异常处理:始终捕获PermissionErrorOSError,避免程序崩溃
  4. 临时目录:使用tempfile.mkdtemp()tempfile.TemporaryDirectory()管理临时文件
  5. Linux权限:明确需要时设置mode参数,Windows无需关心

代码速查表

# 1. 最简方式(推荐日常使用)
import os
os.makedirs("folder/sub", exist_ok=True)
# 2. 更现代的方式
from pathlib import Path
Path("folder/sub").mkdir(parents=True, exist_ok=True)
# 3. 带异常处理的安全函数
def create_dir(path):
    try:
        os.makedirs(path, exist_ok=True)
    except Exception as e:
        print(f"创建目录失败: {e}")

掌握这些方法后,您可以在任何Python项目中高效地管理文件夹创建需求,无论是简单的日志目录,还是复杂的多级文件存储系统,都能应对自如。

抱歉,评论功能暂时关闭!