mpc wrote: > I am trying to write a while loop that will iterate over generators to > capture all the headers of FFCache directories. However, the > generators embedded within the argument of another generator do not > seem to re-initiate. the example below loops through and initiates the > generator embedded in the argument only once. Can anyone explain while > the generator will not re-initiate, and suggest a simple fix?
A generator or generator expression does indeed only run once. >>> gen = (i for i in range(5) if i%2) >>> for i in range(3): ... print "---", i, "---" ... for k in gen: print k, ... print ... --- 0 --- 1 3 --- 1 --- --- 2 --- The fix is to use a list or list comprehension, or make a new generator every time you need one: >>> for i in range(3): ... print "---", i, "---" ... gen = (i for i in range(5) if i%2) ... for k in gen: print k, ... print ... --- 0 --- 1 3 --- 1 --- 1 3 --- 2 --- 1 3 At first glance I would guess that in your case all_caches is the culprit that has to be moved into the 'while True: ...' loop. > while True: > n += 1 > time.sleep(0.5) all_caches = (path for path,dirlist,filelist in os.walk("/Users/") if '_CACHE_MAP_' in filelist) > for path in all_caches: > headers = generate_headers(path) > for h in headers: > print h,n (Untested, because you didn't bother to provide a self-contained example) Peter -- http://mail.python.org/mailman/listinfo/python-list