这是文件夹树:
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:])
此文件夹扫描,并使用folders2
从DIGITS
中的第一个文件夹开始。
在DIGITS
中有编号的目录:1,2,3,4等
现在怎样?尝试使用os.rmdir
,但它给我一个错误,一些关于字符串。实际上,folders2
是一个不是字符串的列表,只是说..
答案 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)