Python:递归删除空文件夹

Python:递归删除空文件夹,python,Python,我在用Python脚本查找和删除空文件夹时遇到问题。 我有一些目录的文件大致如下: A/ --B/ ----a.txt ----b.pdf --C/ ----d.pdf 我正在尝试删除所有不是PDF的文件,然后删除所有空文件夹。我可以删除我想要的文件,但是我不能得到空目录。我做错了什么 os.chdir(path+"/"+name+"/Test Data/Checklists") pprint("Current path: "+ os.getcwd()) for roo

我在用Python脚本查找和删除空文件夹时遇到问题。 我有一些目录的文件大致如下:

A/
--B/
----a.txt
----b.pdf
--C/
----d.pdf
我正在尝试删除所有不是PDF的文件,然后删除所有空文件夹。我可以删除我想要的文件,但是我不能得到空目录。我做错了什么

    os.chdir(path+"/"+name+"/Test Data/Checklists")
    pprint("Current path: "+ os.getcwd())
    for root, dirs, files in os.walk(path+"/"+name+"/Test Data/Checklists"):
            for name in files:
                    if not(name.endswith(".pdf")):
                            os.remove(os.path.join(root, name))
    pprint("Deletting empty folders..")
    pprint("Current path: "+ os.getcwd())
    for root, dirs, files in os.walk(path+"/"+name+"/Test Data/Checklists", topdown=False):
            if not dirs and not files:
                    os.rmdir(root)

使用insted函数

os.removedirs(path)

这将删除目录,直到父目录不为空。

理想情况下,您应该在删除文件后立即删除目录,而不是使用
os.walk执行两次操作

import sys
import os

for dir, subdirs, files in os.walk(sys.argv[1], topdown=False):
    for name in files:
        if not(name.endswith(".pdf")):
            os.remove(os.path.join(dir, name))

    # check whether the directory is now empty after deletions, and if so, remove it
    if len(os.listdir(dir)) == 0:
        os.rmdir(dir)

要删除空文件夹,可以使用此代码段。 它可以与某些文件删除相结合,但“最后一次运行”应按原样使用

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)

删除所有空文件夹

import os 
folders = './A/'  # directory
for folder in list(os.walk(folders)) :
    if not os.listdir(folder[0]):
        os.removedirs(folder[0])




这里只是猜测一下:如果您在最后一行,而不是试图删除根,将其附加到列表中,然后在所有循环之后,删除该列表中的所有目录,会发生什么情况?可能与问题无关,但最好使用
os.path.join
来形成路径(例如
os.walk
调用内)。这不起作用,因为空文件夹中可能包含一个空文件夹,该文件夹将返回
len(os.listdir(dir))
为1,并且不会删除空文件夹ssince
top-down=False
任何较低级别(尤其是叶节点)的空目录都会被第二节删除,因为它们将首先被处理为
dir