吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2783|回复: 9
收起左侧

[Python 转载] python编写的删除特定类型文件和删除空文件夹脚本

[复制链接]
penn.woo 发表于 2021-8-11 15:53

python 编写的两个小脚本

新人第一次发帖,欢迎各位大佬指正!

删除特定类型文件

脚本使用方法:
python 删除特定类型文件.py  需要删除的文件夹路径(当前文件夹可直接用 . ) 需要删除的文件类型(如 txt,jpg 等)

"""
@Time   : 2021/8/7 10:30
@AuThor : wupeng
@file   : 递归删除特定类型文件.py
@Desc   : 递归删除当前文件夹及其子文件夹中特定类型的文件
"""

import os
import argparse

count = 0

def rm_specific_files_recursive(work_dir, spec_ext):
    """
    递归删除指定文件夹中的特定类型文件
    @Param work_dir: 指定的文件夹
    @param spec_ext: 指定的需要删除的文件扩展类型
    @return:
    """
    # 1. 遍历当前文件夹中的所有文件
    for filename in os.listdir(work_dir):
        abs_path = os.path.join(work_dir, filename)
        # 2. 如果是文件
        # 判断是否为指定类型,并决定是否删除
        if os.path.isfile(abs_path):
            rm_specific_file(abs_path, spec_ext)
        # 3. 如果是文件夹
        # 递归调用该方法
        else:
            rm_specific_files_recursive(abs_path, spec_ext)

def rm_specific_file(abs_path, spec_ext):
    """
    删除特定类型文件
    @param abs_path: 文件绝对路径
    @param spec_ext: 特定的文件类型
    @return
    """
    global count
    old_ext = os.path.splitext(abs_path)[-1]
    if old_ext == spec_ext:
        os.remove(abs_path)
        count += 1

def set_args():
    """
    指定命令行中参数的传递方式
    """
    parser = argparse.ArgumentParser(
        description='递归删除当前文件夹及其子文件夹中特定类型的文件'
    )
    parser.add_argument('work_dir', metavar='WORK_DIR', type=str, nargs=1,
                        help='需要删除的文件夹')
    parser.add_argument('spec_ext', metavar='SPEC_EXT', type=str, nargs=1,
                        help='需要删除的文件格式')
    return parser

def get_args():
    """
    获取参数
    """
    parser = set_args()
    args = vars(parser.parse_args())

    work_dir = args['work_dir'][0]
    spec_ext = args['spec_ext'][0]
    if not spec_ext.startswith('.'):
        spec_ext = '.' + spec_ext
    return work_dir, spec_ext

def main():
    global count
    try:
        work_dir, spec_ext = get_args()
    except Exception as e:
        raise(e)

    rm_specific_files_recursive(work_dir, spec_ext)
    print('共删除了 %d 个文件' % count)

if __name__ == '__main__':
    main()

删除空文件夹

脚本使用方法:
python 2-删除空文件夹.py 需要删除的文件夹路径(当前文件夹可直接用 . )

"""
@Time   : 2021/8/10 09:13
@Author : wupeng
@File   : 2-删除空文件夹.py
@Desc   : 删除给定目录中所有为空的文件夹,如果给定目录为空,也删除
"""
import argparse
import os

count = 0

def rm_empty_dir_recursive(work_dir):
    """
    递归删除空文件夹
    优先深入到最后一个文件夹
    :param work_dir: 需要判断的主目录
    :return:
    """
    global count
    files = os.listdir(work_dir)
    for fd in files:
        abs_path = os.path.join(work_dir, fd)
        if os.path.isdir(abs_path):
            print(abs_path)
            rm_empty_dir_recursive(abs_path)
            count += 1

    if not os.listdir(work_dir):
        os.rmdir(work_dir)

def set_args():
    parser = argparse.ArgumentParser(description='删除目录中空文件夹')
    parser.add_argument('work_dir', metavar='WORK_DIR', type=str, nargs=1,
                        help='需要删除的空文件夹')
    return parser

def get_args():
    parser = set_args()
    args = vars(parser.parse_args())
    work_dir = args['work_dir'][0]
    return work_dir

def main():
    global count
    work_dir = get_args()
    rm_empty_dir_recursive(work_dir)
    print('共删除了 %d 个空文件夹' % count)

if __name__ == '__main__':
    main()

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
yjn866y + 1 + 1 我很赞同!
Lucifer_BW + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

dork 发表于 2021-8-11 20:09
还有一点点BUG,不过常见的是够用了
yjn866y 发表于 2021-8-12 08:03
aud 发表于 2021-8-12 09:26
怪你过分美丽1 发表于 2022-6-25 22:40

++

%C2%A5%D6%F7%BA%C3%A3%AC%C7%EB%BD%CC%B8%F6%CE%CA%CC%E2+%A3%AC%CA%D7%CF%C8%B2%BB%D2%AA%D0%A6%CE%D2%A3%A8%B2%BB%B3%DC%CF%C2%CE%CA%B5%C4%A3%A9%0D%0A%CA%D7%CF%C8%C4%FA%B7%A2%B5%C4%D5%E2%B8%F6%B6%D4%CE%D2%CA%C7%BA%DC%D3%D0%B0%EF%D6%FA%B5%C4%A3%A1%0D%0A%B5%AB%CA%C7%CE%D2%B2%BB%BB%E1%D4%CB%D0%D0%A1%A3%A1%A3%0D%0A%CA%C7%B2%BB%CA%C7%D5%B3%CC%F9%BC%C7%CA%C2%B1%BE%B8%C4%B3%C9.py%B5%C4%BA%F3%D7%BA+%CB%AB%BB%F7%BE%CD%BF%C9%D2%D4%A3%BF%0D%0A%BB%B9%CA%C7%D2%AA%D7%A8%C3%C5%B5%C4%B3%CC%D0%F2%B4%F2%BF%AA%A3%BF%0D%0A%CE%D2%D6%B1%BD%D3%B5%E3%B5%C4%B8%B4%D6%C6%B4%FA%C2%EB%A3%AC%CE%D2%D6%B1%BD%D3%D5%B3%CC%F9%BE%CD%BF%C9%D2%D4%C2%F0%A3%BF%0D%0A%BB%B9%CA%C7%D2%AA%C9%BE%B3%FD+%D2%BB%CF%C2%C4%DA%C8%DD%BB%F2%C9%BE%B3%FD%B5%BD%C4%C4%C0%EF%A3%BF%0D%0A%0D%0A%22%22%22%0D%0Ahome.php%3Fmod%3Dspace%26uid%3D238618+++%3A+2021%2F8%2F7+10%3A30%0D%0Ahome.php%3Fmod%3Dspace%26uid%3D686208+%3A+wupeng%0D%0Ahome.php%3Fmod%3Dspace%26uid%3D267492+++%3A+%B5%DD%B9%E9%C9%BE%B3%FD%CC%D8%B6%A8%C0%E0%D0%CD%CE%C4%BC%FE.py%0D%0A%40Desc+++%3A+%B5%DD%B9%E9%C9%BE%B3%FD%B5%B1%C7%B0%CE%C4%BC%FE%BC%D0%BC%B0%C6%E4%D7%D3%CE%C4%BC%FE%BC%D0%D6%D0%CC%D8%B6%A8%C0%E0%D0%CD%B5%C4%CE%C4%BC%FE%0D%0A%22%22
怪你过分美丽1 发表于 2022-6-25 22:41
为什么我的回复 会变成这样
怪你过分美丽1 发表于 2022-6-25 22:46

++

%C4%E3%BA%C3%C2%A5%D6%F7%A3%AC%CE%D2%CA%C7%D0%A1%B0%D7%A1%A3%C7%EB%BD%CC%D2%BB%CF%C2%D5%E2%B8%F6%D4%F5%C3%B4%D3%C3%A3%BF+%B8%B4%D6%C6%B5%BD%BC%C7%CA%C2%B1%BE%B8%C4%B3%C9py%B5%C4%BA%F3%D7%BA%BB%F2BAT%C2%F0%A3%BF+%CE%D2%B5%E3%B5%C4%B8%B4%D6%C6%B4%FA%C2%EB+%BF%C9%D2%D4%D6%B1%BD%D3%D5%B3%CC%F9%C2%F0%A3%BF%BB%F2%D5%DF%D2%AA%C9%BE%B3%FD%B5%E3%CA%B2%C3%B4%B6%AB%CE%F7%C2%F0%A3%BF+%CE%D2%CF%B9%D7%C1%C4%A5%C1%CB%BA%C3%BC%B8%B7%D6%D6%D3%C1%CB%A1%A3%BF%D5%CE%C4%BC%FE%BB%B9%D4%DA%A1%A3%A1%A3%A1%A3+
三滑稽甲苯 发表于 2022-6-26 09:01
v104570998 发表于 2022-6-25 22:41
为什么我的回复 会变成这样

换个浏览器吧
怪你过分美丽1 发表于 2022-6-26 21:46

++

%BA%C3%CF%F1%CA%C7+%B4%F2%C1%CB%28.+P+Y%29%BA%F3%BE%CD%B1%E4%B3%C9%C2%D2%C2%EB%C1%CB
怪你过分美丽1 发表于 2022-6-26 21:47
像是 是 打了 “点皮外” 就变了乱码
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 05:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表