In [1]:
# generators are extremely useful for recursive search

import os

DIR='/vagrant'
os.listdir(DIR)


Out[1]:
['#Vagrantfile#',
 '.git',
 '.ipynb_checkpoints',
 '.vagrant',
 '1 lists.ipynb',
 '1 performance.ipynb',
 '2 slicing reshaping and stacking.ipynb',
 '3 functions in 1d.ipynb',
 '3 random data in 1d.ipynb',
 '4 images and indexing.ipynb',
 '5 functions in 2d.ipynb',
 'clouds.ipynb',
 'convex hull.ipynb',
 'funk_client.py',
 'funk_client.py~',
 'funk_server.py',
 'funk_server.py~',
 'ipn',
 'islands.ipynb',
 'KDTree.ipynb',
 'kernel density estimate.ipynb',
 'landscape.ipynb',
 'LICENSE',
 'random 2d.ipynb',
 'Random forest regression.ipynb',
 'README.md',
 'square wave.ipynb',
 'talk3',
 'talk4',
 'talk5',
 'talk6',
 'Untitled0.ipynb',
 'Vagrantfile']

In [2]:
[os.path.join(DIR,entry) for entry in os.listdir(DIR)]


Out[2]:
['/vagrant/#Vagrantfile#',
 '/vagrant/.git',
 '/vagrant/.ipynb_checkpoints',
 '/vagrant/.vagrant',
 '/vagrant/1 lists.ipynb',
 '/vagrant/1 performance.ipynb',
 '/vagrant/2 slicing reshaping and stacking.ipynb',
 '/vagrant/3 functions in 1d.ipynb',
 '/vagrant/3 random data in 1d.ipynb',
 '/vagrant/4 images and indexing.ipynb',
 '/vagrant/5 functions in 2d.ipynb',
 '/vagrant/clouds.ipynb',
 '/vagrant/convex hull.ipynb',
 '/vagrant/funk_client.py',
 '/vagrant/funk_client.py~',
 '/vagrant/funk_server.py',
 '/vagrant/funk_server.py~',
 '/vagrant/ipn',
 '/vagrant/islands.ipynb',
 '/vagrant/KDTree.ipynb',
 '/vagrant/kernel density estimate.ipynb',
 '/vagrant/landscape.ipynb',
 '/vagrant/LICENSE',
 '/vagrant/random 2d.ipynb',
 '/vagrant/Random forest regression.ipynb',
 '/vagrant/README.md',
 '/vagrant/square wave.ipynb',
 '/vagrant/talk3',
 '/vagrant/talk4',
 '/vagrant/talk5',
 '/vagrant/talk6',
 '/vagrant/Untitled0.ipynb',
 '/vagrant/Vagrantfile']

In [3]:
def dirs(dr):
    for entry in os.listdir(dr):
        path = os.path.join(dr, entry)
        if os.path.isdir(path):
            yield path

list(dirs(DIR))


Out[3]:
['/vagrant/.git',
 '/vagrant/.ipynb_checkpoints',
 '/vagrant/.vagrant',
 '/vagrant/talk3',
 '/vagrant/talk4',
 '/vagrant/talk5',
 '/vagrant/talk6']

In [4]:
def tree(dr):
    for entry in os.listdir(dr):
        path = os.path.join(dr, entry)
        if os.path.isdir(path):
            for p in tree(path):
                yield p
        else:
            yield path
            
list(tree(DIR))


Out[4]:
['/vagrant/#Vagrantfile#',
 '/vagrant/.git/config',
 '/vagrant/.git/description',
 '/vagrant/.git/HEAD',
 '/vagrant/.git/hooks/applypatch-msg.sample',
 '/vagrant/.git/hooks/commit-msg.sample',
 '/vagrant/.git/hooks/post-update.sample',
 '/vagrant/.git/hooks/pre-applypatch.sample',
 '/vagrant/.git/hooks/pre-commit.sample',
 '/vagrant/.git/hooks/pre-push.sample',
 '/vagrant/.git/hooks/pre-rebase.sample',
 '/vagrant/.git/hooks/pre-receive.sample',
 '/vagrant/.git/hooks/prepare-commit-msg.sample',
 '/vagrant/.git/hooks/update.sample',
 '/vagrant/.git/index',
 '/vagrant/.git/info/exclude',
 '/vagrant/.git/logs/HEAD',
 '/vagrant/.git/logs/refs/heads/master',
 '/vagrant/.git/logs/refs/remotes/origin/HEAD',
 '/vagrant/.git/objects/pack/pack-f8cf48ded75163f0ec78abc2df3ab7b56f98e5b7.idx',
 '/vagrant/.git/objects/pack/pack-f8cf48ded75163f0ec78abc2df3ab7b56f98e5b7.pack',
 '/vagrant/.git/packed-refs',
 '/vagrant/.git/refs/heads/master',
 '/vagrant/.git/refs/remotes/origin/HEAD',
 '/vagrant/.ipynb_checkpoints/Untitled0-checkpoint.ipynb',
 '/vagrant/.vagrant/machines/default/virtualbox/action_provision',
 '/vagrant/.vagrant/machines/default/virtualbox/action_set_name',
 '/vagrant/.vagrant/machines/default/virtualbox/creator_uid',
 '/vagrant/.vagrant/machines/default/virtualbox/id',
 '/vagrant/.vagrant/machines/default/virtualbox/index_uuid',
 '/vagrant/.vagrant/machines/default/virtualbox/private_key',
 '/vagrant/.vagrant/machines/default/virtualbox/synced_folders',
 '/vagrant/1 lists.ipynb',
 '/vagrant/1 performance.ipynb',
 '/vagrant/2 slicing reshaping and stacking.ipynb',
 '/vagrant/3 functions in 1d.ipynb',
 '/vagrant/3 random data in 1d.ipynb',
 '/vagrant/4 images and indexing.ipynb',
 '/vagrant/5 functions in 2d.ipynb',
 '/vagrant/clouds.ipynb',
 '/vagrant/convex hull.ipynb',
 '/vagrant/funk_client.py',
 '/vagrant/funk_client.py~',
 '/vagrant/funk_server.py',
 '/vagrant/funk_server.py~',
 '/vagrant/ipn',
 '/vagrant/islands.ipynb',
 '/vagrant/KDTree.ipynb',
 '/vagrant/kernel density estimate.ipynb',
 '/vagrant/landscape.ipynb',
 '/vagrant/LICENSE',
 '/vagrant/random 2d.ipynb',
 '/vagrant/Random forest regression.ipynb',
 '/vagrant/README.md',
 '/vagrant/square wave.ipynb',
 '/vagrant/talk3/1 knn sklearn.ipynb',
 '/vagrant/talk3/2 knn cdist impl.ipynb',
 '/vagrant/talk3/3 knn cdist knn impl demo.ipynb',
 '/vagrant/talk3/4 knn no cdist.ipynb',
 '/vagrant/talk3/5 knn no KDTree (skip).ipynb',
 '/vagrant/talk3/6 knn KDTree.ipynb',
 '/vagrant/talk3/6 random forest.ipynb',
 '/vagrant/talk3/mandelbrot set.ipynb',
 '/vagrant/talk3/poly roots.ipynb',
 '/vagrant/talk4/.ipynb_checkpoints/0 values variables and objects-checkpoint.ipynb',
 '/vagrant/talk4/.ipynb_checkpoints/1 tuples-checkpoint.ipynb',
 '/vagrant/talk4/.ipynb_checkpoints/2 lists and slices-checkpoint.ipynb',
 '/vagrant/talk4/.ipynb_checkpoints/3 dicts and strings-checkpoint.ipynb',
 '/vagrant/talk4/.ipynb_checkpoints/4 functions-checkpoint.ipynb',
 '/vagrant/talk4/.ipynb_checkpoints/5 iteration over sequences and dicts-checkpoint.ipynb',
 '/vagrant/talk4/.ipynb_checkpoints/6 list comprehensions-checkpoint.ipynb',
 '/vagrant/talk4/.ipynb_checkpoints/7 generators and yield-checkpoint.ipynb',
 '/vagrant/talk4/0 values variables and objects.ipynb',
 '/vagrant/talk4/1 tuples.ipynb',
 '/vagrant/talk4/2 lists and slices.ipynb',
 '/vagrant/talk4/3 dicts and strings.ipynb',
 '/vagrant/talk4/4 functions.ipynb',
 '/vagrant/talk4/5 iteration over sequences and dicts.ipynb',
 '/vagrant/talk4/6 list comprehensions.ipynb',
 '/vagrant/talk4/7 generators and yield.ipynb',
 '/vagrant/talk5/.ipynb_checkpoints/classes-checkpoint.ipynb',
 '/vagrant/talk5/.ipynb_checkpoints/decorators1-checkpoint.ipynb',
 '/vagrant/talk5/.ipynb_checkpoints/exceptions-checkpoint.ipynb',
 '/vagrant/talk5/classes.ipynb',
 '/vagrant/talk5/decorators1.ipynb',
 '/vagrant/talk5/ducktyping.ipynb',
 '/vagrant/talk5/exceptions.ipynb',
 '/vagrant/talk5/generators1.ipynb',
 '/vagrant/talk5/generators2.ipynb',
 '/vagrant/talk5/generators3.ipynb',
 '/vagrant/talk5/recursion1.ipynb',
 '/vagrant/talk6/contextmgr.ipynb',
 '/vagrant/talk6/fib_iter.ipynb',
 '/vagrant/talk6/Untitled.ipynb',
 '/vagrant/talk6/Untitled1.ipynb',
 '/vagrant/Untitled0.ipynb',
 '/vagrant/Vagrantfile']