Python:递归删除空文件夹
我在用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
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,并且不会删除空文件夹ssincetop-down=False
任何较低级别(尤其是叶节点)的空目录都会被第二节删除,因为它们将首先被处理为dir