os.rmdir() and os.removedirs() only work on empty directories?
ben.hutchings at roundpoint.com
Tue Dec 5 17:05:28 CET 2000
jschmitt at vmlabs.com writes:
> I was a bit surprised to find that os.rmdir() and os.removedirs() both
> complained if I tried to delete a directory that was not empty. Is
> that expected?
POSIX says the rmdir call should only remove an empty directory, so it
doesn't surprise me that os.rmdir behaves this way. I have yet to see
what os.removedirs is for.
> I guess shutil.rmtree() is the tool to use if I really want to
> recursively delete a directory hierarchy that is non-empty.
I hadn't seen that one - I wrote this function myself when I wanted
"""Remove a directory, and all its contents if it is not already empty."""
for name in os.listdir(dir):
full_name = os.path.join(dir, name)
# on Windows, if we don't have write permission we can't remove
# the file/directory either, so turn that on
if not os.access(full_name, os.W_OK):
> I don't quite understand this part of the documentation os.removedirs():
> '...if the leaf directory is successfully removed, directories
> corresponding to rightmost path segments will be pruned way until
> either the whole path is consumed...'
I believe that this means it will remove successive parent directories
referred to in the given path if they have become empty - so if you have
the following directory structure:
. (current directory)
| | |
| | +--c/
| | |
| | +--d/
and you call os.removedirs('a/b/c/d'), it will remove directories
a/b/c/d, a/b/c and a/b (assuming the process is permitted to do so).
It will attempt to remove a, fail because a is not empty, and then
Any opinions expressed are my own and not necessarily those of Roundpoint.
More information about the Python-list