我正在尝试删除目录的空文件夹。
def remove_empty_dir(path):
try:
os.rmdir(path)
except OSError:
pass
def remove_empty_dirs(path):
for root, dirnames, filenames in os.walk(path):
for dirname in dirnames:
remove_empty_dir(os.path.realpath(os.path.join(root, dirname)))
remove_empty_dirs(path)我还尝试过:
import shutil
shutil.rmtree(path)但这会删除所有内容,即使是那些包含内容的文件夹。问题是我需要这么做
从内到外
,这样,如果我有:
root_folder
child_folder1
grandchild_folder1.1 (empty)
child_folder2
granchild_folder2.1
granchild_folder2.2 (empty)程序应该删除孙子
_
文件夹1.1,子文件夹
_
folder1和子级
_
folder2.2,但不是其余的。
发布于 2014-05-06 15:53:39
接受可选
参数(默认值: True)。
通过提供
,你可以先从子目录开始迭代。
def remove_empty_dirs(path):
for root, dirnames, filenames in os.walk(path, topdown=False):
for dirname in dirnames:
remove_empty_dir(os.path.realpath(os.path.join(root, dirname)))发布于 2021-03-01 14:11:04
使用Python3中的pathlib库,这是一个一行程序(不包括在内)。在target下面的代码片段中
_
path是要清理的树的根的字符串:
from pathlib import Path
import os
[os.removedirs(p) for p in Path(target_path).glob('**/*') if p.is_dir() and len(list(p.iterdir())) == 0]为了使它不那么密集,并且更容易理解,这是在没有列表理解的情况下编写的相同内容
for p in Path(target_path).glob('**/*'):
if p.is_dir() and len(list(p.iterdir())) == 0:
os.removedirs(p)这里有趣的特性是if语句过滤文件系统树上留下的空目录。os.removedirs()删除空叶上的所有空文件夹。如果一个分支上有多个空叶,删除最后一个空叶将导致os.removedirs()遍历该分支。所以所有的空目录在循环的一次迭代中就消失了,不需要递归!
发布于 2020-05-01 23:46:53
def remove_empty_dirs(dir_path):
p1 = subprocess.Popen(["find", dir_path, "-type", "d", "-empty", "-print0"], stdout=subprocess.PIPE,)
p2 = subprocess.Popen(["xargs", "-0", "-r", "rmdir"], stdin=p1.stdout, stdout=subprocess.PIPE)
p1.stdout.close()
p2.communicate()https://stackoverflow.com/questions/23488924
复制相似问题