Terry Reedy <tjre...@udel.edu> writes:

> You did not specify version.  In Python3, os.walk has become a
> generater function.  So, to answer your question, use 3.1.

os.walk has been a generator function all along, but that doesn't help
OP because it still uses os.listdir internally.  This means that it
both creates huge lists for huge directories, and holds on to those
lists until the iteration over the directory (and all subdirectories)
is finished.

In fact, os.walk is not suited for this kind of memory optimization
because yielding a *list* of files (and a separate list of
subdirectories) is specified in its interface.  This hasn't changed in
Python 3.1:

    dirs, nondirs = [], []
    for name in names:
        if isdir(join(top, name)):
            dirs.append(name)
        else:
            nondirs.append(name)

    if topdown:
        yield top, dirs, nondirs
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to