这是文件夹树:
FOLDER\\
\\1\\file
\\2\\file
\\3\\
\\4\\file
Run Code Online (Sandbox Code Playgroud)
脚本应该扫描(循环)FOLDER 中的每个文件夹并检查子文件夹是否为空。如果是,则必须将其删除。
到目前为止,我的代码是这样的:
folders = ([x[0] for x in os.walk(os.path.expanduser('~\\Desktop\\FOLDER\\DIGITS\\'))])
folders2= (folders[1:])
Run Code Online (Sandbox Code Playgroud)
此扫描文件夹,并使用folders2从DIGITS. 在DIGITS有编号的目录:1,2,3,4等
怎么办?尝试使用,os.rmdir但它给了我一个错误,关于字符串。其实folders2是一个列表,不是一个字符串,只是说...
小智 19
在其他答案的基础上扩展一些内容:
如果您使用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 = False
for subdir in subdirs:
if os.path.join(current_dir, subdir) not in deleted:
still_has_subdirs = True
break
if not any(files) and not still_has_subdirs:
os.rmdir(current_dir)
deleted.add(current_dir)
return deleted
Run Code Online (Sandbox Code Playgroud)
不确定你得到什么样的错误,这对我来说非常有效:
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])
Run Code Online (Sandbox Code Playgroud)
仅在文件夹为空时删除文件夹:
import os
import shutil
if len(os.listdir(folder_path)) == 0: # Check if the folder is empty
shutil.rmtree(folder_path) # If so, delete it
Run Code Online (Sandbox Code Playgroud)
您可以使用以下代码段删除所有空文件夹和子文件夹。
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")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13992 次 |
| 最近记录: |