116

How do I delete a possibly non-empty dir in Python.

The directory may have nested subdirectories many levels deep.

flybywire
  • 261,858
  • 191
  • 397
  • 503

3 Answers3

186

Use shutil.rmtree:

import shutil

shutil.rmtree(path)

See the documentation for details of how to handle and/or ignore errors.

Stefan Falk
  • 23,898
  • 50
  • 191
  • 378
RichieHindle
  • 272,464
  • 47
  • 358
  • 399
91

The standard library includes shutil.rmtree for this. By default,

shutil.rmtree(path)  # errors if dir not empty

will give OSError: [Errno 66] Directory not empty: <your/path>.

You can delete the directory and its contents anyway by ignoring the error:

shutil.rmtree(role_fs_path, ignore_errors=True)

You can perform more sophisticated error handling by also passing onerrror=<some function(function, path, excinfo)>.

dgh
  • 8,969
  • 9
  • 38
  • 49
12

You want shutil.rmtree

shutil.rmtree(path[, ignore_errors[, onerror]])

Delete an entire directory tree; path must point to a directory (but not a symbolic link to a directory). If ignore_errors is true, errors resulting from failed removals will be ignored; if false or omitted, such errors are handled by calling a handler specified by onerror or, if that is omitted, they raise an exception.

Community
  • 1
  • 1
Andrew Dalke
  • 14,889
  • 4
  • 39
  • 54