sri*_*ram 172 python directory
我在删除空目录时遇到问题.我有这样的代码:
for dirpath, dirnames, filenames in os.walk(dir_to_search):
//other codes
try:
os.rmdir(dirpath)
except OSError as ex:
print(ex)
Run Code Online (Sandbox Code Playgroud)
这个论点dir_to_search是我传递工作需要关闭的目录.该目录如下所示:
test/20/...
test/22/...
test/25/...
test/26/...
Run Code Online (Sandbox Code Playgroud)
请注意,以上所有文件夹都是空的.当我运行该脚本的文件夹20,25单独被删除!但文件夹25并26没有删除,即使它们是空文件夹.
我得到的例外是:
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/29'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/29/tmp'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/28'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/28/tmp'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/26'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/25'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/27'
[Errno 39] Directory not empty: '/home/python-user/shell-scripts/s3logs/test/2012/10/27/tmp'
Run Code Online (Sandbox Code Playgroud)
我犯了错误的地方.
提前致谢.
小智 345
import shutil
shutil.rmtree('/path/to/your/dir/')
Run Code Online (Sandbox Code Playgroud)
lqs*_*lqs 27
默认行为os.walk()是从根走到叶.设置topdown=False在os.walk()从叶步行到根.
mit*_*tch 12
显示有点晚了但这里是我的纯Pathlib递归目录unlinker
def rmdir(dir):
dir = Path(dir)
for item in dir.iterdir():
if item.is_dir():
rmdir(item)
else:
item.unlink()
dir.rmdir()
rmdir(pathlib.Path("dir/"))
Run Code Online (Sandbox Code Playgroud)
最好使用绝对路径并仅导入rmtree函数,
from shutil import rmtree
因为这是一个大包,上面的行只会导入所需的函数.
from shutil import rmtree
rmtree('directory-absolute-path')
Run Code Online (Sandbox Code Playgroud)
小智 5
只是为了下一个寻找 micropython 解决方案的人,这完全基于 os(listdir、remove、rmdir)。它既不完整(尤其是在错误处理方面)也不花哨,但它在大多数情况下都可以工作。
def deltree(target):
print("deltree", target)
for d in os.listdir(target):
try:
deltree(target + '/' + d)
except OSError:
os.remove(target + '/' + d)
os.rmdir(target)
Run Code Online (Sandbox Code Playgroud)