删除空文件夹(Python)

时间:2017-11-03 10:30:06

标签: python directory

这是文件夹树:

FOLDER\\
       \\1\\file
       \\2\\file
       \\3\\
       \\4\\file

脚本应扫描(循环)FOLDER中的每个文件夹,并检查子文件夹是否为空。如果是,则必须将其删除。

到目前为止,我的代码是:

folders = ([x[0] for x in os.walk(os.path.expanduser('~\\Desktop\\FOLDER\\DIGITS\\'))])
folders2= (folders[1:])

此文件夹扫描,并使用folders2DIGITS中的第一个文件夹开始。 在DIGITS中有编号的目录:1,2,3,4等

现在怎样?尝试使用os.rmdir,但它给我一个错误,一些关于字符串。实际上,folders2是一个不是字符串的列表,只是说..

8 个答案:

答案 0 :(得分:2)

import os

directory = r'path-to-directory'

for entry in os.scandir(directory):
    if os.path.isdir(entry.path) and not os.listdir(entry.path) :
        os.rmdir(entry.path)

在这里您可以找到关于scandir的很好的介绍/解释

答案 1 :(得分:2)

要扩展其他答案的一些内容:

如果您使用 os.walk(topdown=False),它会以相反的顺序运行,因此您会在父目录之前遇到子目录。然后,如果您跟踪删除了哪些目录,则可以递归删除父目录。

import os


def delete_empty_folders(root):

    deleted = set()
    
    for current_dir, subdirs, files in os.walk(root, topdown=False):

        still_has_subdirs = any(
            _ for subdir in subdirs
            if os.path.join(current_dir, subdir) not in deleted
        )
    
        if not any(files) and not still_has_subdirs:
            os.rmdir(current_dir)
            deleted.add(current_dir)

    return deleted

答案 2 :(得分:1)

不确定你会得到什么样的错误,这对我来说非常有用:

import os

root = 'FOLDER'
folders = list(os.walk(root))[1:]

for folder in folders:
    # folder example: ('FOLDER/3', [], ['file'])
    if not folder[2]:
        os.rmdir(folder[0])

答案 3 :(得分:1)

您可以使用以下代码段删除所有空文件夹和子文件夹。

import os


def remove_empty_folders(path_abs):
    walk = list(os.walk(path_abs))
    for path, _, _ in walk[::-1]:
        if len(os.listdir(path)) == 0:
            os.remove(path)

if __name__ == '__main__':
    remove_empty_folders("your-path")

答案 4 :(得分:1)

几乎是伊万·B·伊万(IvánB.)所说的,但对我来说很小的改动

Import os, shutil
path_abs=('YourPath')
walk = list(os.walk(path_abs))
for path, _, _ in walk[::-1]:
    if len(os.listdir(path)) == 0:
        os.rmdir(path)

答案 5 :(得分:1)

#LOOP THROUGH ALL SUBFOLDERS FIRST

import os
root = os.getcwd() #CHANGE THIS TO PATH IF REQUIRED
folders = sorted(list(os.walk(root))[1:],reverse=True)
for folder in folders:
    try:
        os.rmdir(folder[0])
    except OSError as error: 
        print("Directory '{}' can not be removed".format(folder[0])) 

这应该首先浏览所有子文件夹,如果没有空文件夹,则将其删除。不删除父文件夹中的非空文件夹。

我知道这是一个老帖子,但我自己已经老了!

答案 6 :(得分:0)

仅在文件夹为空时删除它:

import os

if len(os.listdir(folder_path)) == 0: # Check is empty..
    shutil.rmtree(folder_path) # Delete..

答案 7 :(得分:0)

要删除空白文件夹,您可以使用此代码段。

import os


def drop_empty_folders(directory):
    """Verify that every empty folder removed in local storage."""

    for dirpath, dirnames, filenames in os.walk(directory, topdown=False):
        if not dirnames and not filenames:
            os.rmdir(dirpath)