On Sat, 27 Oct 2007 18:07:44 +0200, Martin Marcher wrote: > Hello, > > I'm playing around with os.walk and I made up del_tree(path) which I > think is correct (in terms of the algorithm, but not as python wants > it :)).
It's not correct in terms of the algorithm if you take the algorithm of `os.walk()` into the equation. > Here goes the script, as far as I tested it it runs fine in test mode. > Now that is just use the print statements like attached below. as soon > as os.rmdir and os.unlink are involved the iterator chokes. How do I > get around that, or what should I use to be able to recursively delete > everything under a certain subdir? > #--snip > import sys > import os > import unittest > > def del_tree(path): > walker = os.walk(path) `os.walk()` is itself diving recursivly into the subdirectories… > for entry in walker: > cwd = entry[0] > subdirs = entry[1] > files = entry[2] > print "Checking directory: %s" %(cwd, ) > if files: > for file in files: > file = os.path.join(cwd, file) > print "The file is now: %s" % (file, ) > #os.unlink(file) > print "OK directory %s has no more files, checking for > subdirs..." % (cwd, ) > else: > print "OK directory %s NEVER HAD FILES, checking for > subdirs..." % (cwd, ) > if not subdirs: > print "We can delete: %s" % (cwd, ) > #os.rmdir(cwd) > else: > for subdir in subdirs: > subdir = os.path.join(cwd, subdir) > print "We need to recurse into: %s" % (subdir, ) > del_tree(subdir) …and here you are calling the your function recursively which then calls again `os.walk()` on that subdirectory. That's a little bit too much. Just use `os.listdir()` (and `os.path.isdir()`) in your recursive function. > #os.rmdir(path) > print "Removing: %s" % (path, ) > #--snap Or `shutil.rmtree()`. :-) Ciao, Marc 'BlackJack' Rintsch -- http://mail.python.org/mailman/listinfo/python-list