[EMAIL PROTECTED] wrote: > Scott David Daniels wrote: >> Sorry, "re-iterables". A file re-iterable is: >> >> class FileReIterable(object): ... >> def __iter__(self): >> self.file.seek(0) >> return iter(self.file) >> >> This works if-and-only-if it is only in use once at a time. >> If you have multiple simultaneous accesses, you need to do >> something like: >> >> class FileReIterable2(object): ... >> def __iter__(self): >> self.file.seek(0) >> for line in self.file: >> nextpos = self.file.tell() >> yield line >> self.file.seek(nextpos) > > Since I was doing this as a self education excercise. When you say is > in use once and only once, you mean I can only use a single instance of > the class? No. This works:
f1 = FileReIterable("one.file") f2 = FileReIterable("another.file") ... free uses of ... This does not "work": gen = FileReIterable("one.file") for a in gen: for b in gen: print a, b This does "work": gen = FileReIterable2("one.file") for a in gen: for b in gen: print a, b That is, any instance of FileReIterable must not be used in a context where it may be in the midst of iterating a file, gets used to produce a result, and then must produce a result from the original iteration. If you think about what must happen to the file read pointer, the reason for all of this should become clear. --Scott David Daniels [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list