Efficiently Removing Subdirectories In Dirnames From Os.walk
On a mac in python 2.7 when walking through directories using os.walk my script goes through 'apps' i.e. appname.app, since those are really just directories of themselves. Well la
Solution 1:
You can do something like this (assuming you want to ignore directories containing '.'):
subdirs[:] = [d fordin subdirs if'.' not in d]
The slice assignment (rather than just subdirs = ...
) is necessary because you need to modify the same list that os.walk
is using, not create a new one.
Note that your original code is incorrect because you modify the list while iterating over it, which is not allowed.
Solution 2:
Perhaps this example from the Python docs for os.walk will be helpful. It works from the bottom up (deleting).
# Delete everything reachable from the directory named in"top",
# assuming there are no symbolic links.
# CAUTION: This is dangerous! For example, if top == '/', it
# could delete all your disk files.
import osfor root, dirs, files inos.walk(top, topdown=False):
for name in files:
os.remove(os.path.join(root, name))
for name in dirs:
os.rmdir(os.path.join(root, name))
I am a bit confused about your goal, are you trying to remove a directory subtree and are encountering errors, or are you trying to walk a tree and just trying to list simple file names (excluding directory names)?
Post a Comment for "Efficiently Removing Subdirectories In Dirnames From Os.walk"