filenames = [os.path.join(dirpath, filename)# This is cool for dirpath, _, filenames in os.walk('.') # This is getting tricky, whats the '_' for?
Nothing to do with the list comprehension really. '_' is a commonly used variable name for an object that we don't care about. If you look at the OP's original code, the line:
[(x[0], x[2]) for x in os.walk(".")]
is the equivalent of:
[dirpath, filenames for dirpath, dirnames, filenames in os.walk('.')]
I prefer to give names to the values produced by os.walk -- I think it makes the usage much clearer. However, since I don't use 'dirnames', I use '_' to indicate this:
[dirpath, filenames for dirpath, _, filenames in os.walk('.')]
Would
filenames = [os.path.join(dirpath, filename) for dirpath, dirnames, filenames in os.walk('.') for filename in filenames]
have been clearer for you? Then all you have to do is remember the order of the for-loop execution:
# Which thing goes where again in a comprehension? for filename in filenames]
As mentioned in my other post, the order is identical to that of for-loops, e.g.
result = [] for dirpath, _, filenames in os.walk('.'): for filename in filenames: result.append(os.path.join(dirpath, filename))
is basically equivalent to:
[os.path.join(dirpath, filename) for dirpath, _, filenames in os.walk('.') for filename in filenames]
Does that help?
Steve -- http://mail.python.org/mailman/listinfo/python-list