美文网首页
如何使用Python选择性地删除文件夹中的文件?

如何使用Python选择性地删除文件夹中的文件?

作者: 活用数据 | 来源:发表于2019-05-09 20:24 被阅读0次

    问题1

    问题描述:在一个文件夹中,有着普通文件以及文件夹,那么我们如何做到删除全部文件夹而不删除文件呢?

    如下图所示,我们想要删除test文件夹中的所有文件夹,而保留其他文件:

    Version 1

    看到这个问题的第一刻,我想到的是文件夹没有后缀名,其他文件有后缀名,而拥有后缀名则意味着文件名称里面会有.的存在,我们就可以利用这个差别,来区分两者,进而实现问题描述中的功能。于是我就写出了以下Python代码:

    import os
    
    os.chdir('H:\\学习代码\\test')    # 改变路径到想要进行操作的文件夹
    
    file_list = os.listdir()
    for file in file_list:
        # 通过split方法,文件夹名称的长度是1,也就是我们要删除的对象
        if len(file.split('.')) == 1:
            print('已删除:' + file)
            os.rmdir(file)
    
    print('Finished.')
    

    运行结果:


    我们可以看到,test文件夹中的文件已经全部删除。

    Version 2.0

    但是,后来仔细一想,上面这种方法却存在一个非常大的问题,如果普通文件是没有后缀名,也就是文件名称中不存在.,这可怎么办?

    接着,我又发现了文件夹和普通文件的另外一个区别,也就是文件夹是可以使用os.chdir("file_name")这个命令的,而普通文件则显然不行,会出现异常。所以,就写下了以下代码:

    import os
    
    os.chdir('H:\\学习代码\\test')
    
    file_list = os.listdir()
    for file in file_list:
        try:
            os.chdir(file)    # 如果能进入当前文件,说明该文件是文件夹
            os.chdir('..')    # 返回到上一层路径
            os.rmdir(file)    # 删除文件夹
            print('已删除:' + file)
        except NotADirectoryError:
            print('非文件夹:' + file)
    print('Finished')
    

    运行结果:



    可以看到,文件夹已经删除,而没有后缀名的普通文件依然存在。


    Version 2.1

    使用os.walk()函数实现同样功能的另外一种写法:

    import os
    
    for roots, dirs, files in os.walk('H:\\学习代码\\test'):
        for dir in dirs:
            os.chdir('H:\\学习代码\\test')
            os.rmdir(dir)
    print('Finished.')
    

    问题2

    问题描述:我们如何做到删除一个文件夹中的空白文件夹,而不删除其他文件呢?

    可以看出,问题2是问题1的进阶版本,只需要在问题1的代码基础上,增加一个判断文件夹是否空白的语句即可。

    import os
    
    os.chdir('H:\\学习代码\\test')
    
    file_list = os.listdir()
    for file in file_list:
        try:
            os.chdir('H:\\学习代码\\test\\' + file)    # 如果能进入当前文件,说明该文件是文件
            if len(os.listdir()) == 0:
                os.chdir('..')    # 返回到上一层路径
                os.rmdir(file)    # 删除文件夹
                print('已删除:' + file)
            os.chdir('..')
        except NotADirectoryError:
            print('非文件夹:' + file)
    print('Finished')
    

    运行结果:


    使用os.walk()函数实现同样功能的另外一种写法:

    for roots, dirs, files in os.walk('H:\\学习代码\\test'):
        for dir in dirs:
            os.chdir('H:\\学习代码\\test\\' + dir)
            if len(os.listdir()) == 0:
                os.chdir('..')    # 返回到上一层路径
                os.rmdir(dir)
    print('Finished.')
    

    相关文章

      网友评论

          本文标题:如何使用Python选择性地删除文件夹中的文件?

          本文链接:https://www.haomeiwen.com/subject/vcbgoqtx.html