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 later on in processing I am hitting errors when going through them. I don't want to go through them anyways so for my purposes it would be best just to ignore those types of 'directories'.
So this is my current solution:
for root, subdirs, files in os.walk(directory, True):
for subdir in subdirs:
if '.' in subdir:
subdirs.remove(subdir)
#do more stuff
As you can see, the second for loop will run for every iteration of subdirs, which is unnecessary since the first pass removes everything I want to remove anyways.
There must be a more efficient way to do this. Any ideas?
Perhaps this example from the Python docs for os.walk will be helpful. It works from the bottom up (deleting).
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)?
You can do something like this (assuming you want to ignore directories containing '.'):
The slice assignment (rather than just
subdirs = ...
) is necessary because you need to modify the same list thatos.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.