import os def dir_walker(root, filter_fn=lambda f: True): if root.startswith('.'): root = os.path.abspath(root) root = os.path.expanduser(os.path.expandvars(root)) if filter_fn(root): for fname in os.listdir(root): pth = os.path.join(root, fname) if os.path.isdir(pth): for entry in dir_walker(pth): yield entry yield pth readable = lambda f: os.access(f, os.R_OK) writeable = lambda f: os.access(f, os.W_OK) for f in dir_walker('.', readable): print f