前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 如何删除文件夹下的所有文件和子文件夹?

python 如何删除文件夹下的所有文件和子文件夹?

作者头像
上海-悠悠
发布2024-03-25 15:44:17
1140
发布2024-03-25 15:44:17
举报

前言

删除文件夹下的所有的文件,以及子文件下所有的文件,把这个文件夹全部删除。

shutil.rmtree() 删除

先介绍一个最简单的方法,shutil.rmtree()

代码语言:javascript
复制
import shutil
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/


shutil.rmtree('D:\\test', ignore_errors=True)

删除 D:\test 目录下全部文件,并且忽略错误

os模块递归删除

可以通过os模块,自己写个递归删除

代码语言:javascript
复制
import os
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/


def delete_dir_file(dir_path):
    """
    递归删除文件夹下文件和子文件夹里的文件,不会删除空文件夹
    :param dir_path: 文件夹路径
    :return:
    """
    if not os.path.exists(dir_path):
        return
    # 判断是不是一个文件路径,并且存在
    if os.path.isfile(dir_path) and os.path.exists(dir_path):
        os.remove(dir_path)  # 删除单个文件
    else:
        file_list = os.listdir(dir_path)
        for file_name in file_list:
            delete_dir_file(os.path.join(dir_path, file_name))
    # 递归删除空文件夹
    if os.path.exists(dir_path):
        os.rmdir(dir_path)


if __name__ == '__main__':
    delete_dir_file('./data')

上面代码删除的时候,如果想保留我们文件夹以及子文件夹,仅仅只删除文件,可以去掉这句

代码语言:javascript
复制
    # 递归删除空文件夹
    if os.path.exists(dir_path):
        os.rmdir(dir_path)

还有另外一种实现方式

代码语言:javascript
复制
import os
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/


def delete_dir2(dir_path):

    # os.walk会得到dir_path下各个后代文件夹和其中的文件的三元组列表
    for root, dirs, files in os.walk(dir_path, topdown=False):
        print(root)  # 文件夹绝对路径
        print(dirs)  # root下一级文件夹名称列表,如 ['文件夹1','文件夹2']
        print(files)  # root下文件名列表,如 ['文件1.xx','文件2.xx']
        # 第一步:删除文件
        for name in files:
            os.remove(os.path.join(root, name))  # 删除文件
        # 第二步:删除空文件夹
        for name in dirs:
            os.rmdir(os.path.join(root, name))  # 删除一个空目录

    # 加这段代码,最外层文件夹也一起删除
    if os.path.exists(dir_path):
        os.rmdir(dir_path)


delete_dir2('data')

如果需要把最外层目录一起删除,可以加上这句

代码语言:javascript
复制
    # 加这段代码,最外层文件夹也一起删除
    if os.path.exists(dir_path):
        os.rmdir(dir_path)

使用 pathlib 模块实现

os模块现在很少用了,用 pathlib 模块替换os 模块相关代码

代码语言:javascript
复制
from pathlib import Path
# 上海悠悠 wx:283340479
# blog:https://www.cnblogs.com/yoyoketang/


def delete_dir_file(dir_path):
    """
    递归删除文件夹下文件和子文件夹里的文件,不会删除空文件夹
    :param dir_path: 文件夹路径
    :return:
    """
    p = Path(dir_path)
    if not p.exists():
        return
    # 判断是不是一个文件路径,并且存在
    if p.is_file() and p.exists():
        p.unlink()  # 删除单个文件
    else:
        for file_name in p.iterdir():
            # 递归删除文件
            delete_dir_file(file_name)
    # 递归删除空文件夹
    if p.exists():
        p.rmdir()


if __name__ == '__main__':
    delete_dir_file('./data')
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • shutil.rmtree() 删除
  • os模块递归删除
  • 使用 pathlib 模块实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档