Hi Chris, Thanks for the super fast reply.
I tried your fix (with a slight modification, namely, I changed your line to be: line_ = generator.next()) And I got the printout I expected. Many thanks, Ron. P.S.: My program looks like so, with your suggestion: $ cat LogManager_try.py #!/usr/bin/env python import gzip import os class LogStream(): """ """ def __init__(self, filename): self.filename = filename self.input_file = self.open_file(filename) def open_file(self, in_file): """ The gzip module checks if the input file is a gzipped file, only at the read stage. This is why the f.readline() is needed. """ try: f = gzip.GzipFile(in_file, "r") f.readline() except IOError: f = open(in_file, "r") f.readline() f.seek(0) return(f) def next_line(self, in_file): """ """ for line_ in in_file: yield line_.strip() if __name__ == "__main__": filename = "sac.log.gz" log_stream = LogStream(filename) generator = log_stream.next_line(log_stream.input_file) #create generator line_ = generator.next() #get next item from generator print line_ -----Original Message----- From: cvreb...@gmail.com [mailto:cvreb...@gmail.com] On Behalf Of Chris Rebert Sent: Monday, December 22, 2008 11:53 To: Barak, Ron Cc: python-list@python.org Subject: Re: Basic misunderstanding of generators On Mon, Dec 22, 2008 at 1:47 AM, Barak, Ron wrote: > Hi All, > > I want to use generators to print lines taken from a gzipped file. > I've never used generators, so probably my problem is basic > misunderstanding of generators. > > In the below program, I expected the last line ("print line_") to > print the first line of the sac.log.gz file. > Instead, I get: > > <generator object at 0x00B93A08> > > Could you tell me what I'm doing wrong (or point me to a URL that > could set me straight) ? > > Thanks, > Ron. > > > $ cat LogManager_try.py > #!/usr/bin/env python > > import gzip > import os > > class LogStream(): > """ > """ > > def __init__(self, filename): > self.filename = filename > self.input_file = self.open_file(filename) > > def open_file(self, in_file): > """ > The gzip module checks if the input file is a gzipped file, > only at the read stage. > This is why the f.readline() is needed. > """ > try: > f = gzip.GzipFile(in_file, "r") > f.readline() > except IOError: > f = open(in_file, "r") > f.readline() > > f.seek(0) > return(f) > > def next_line(self, in_file): > """ > """ > for line_ in in_file: > yield line_.strip() > > if __name__ == "__main__": > filename = "sac.log.gz" > log_stream = LogStream(filename) generator = log_stream.next_line(log_stream.input_file) #create generator line_ = generator() #get next item from generator print line_ And as you can see, this makes next_line a bit of a misnomer. Cheers, Chris -- Follow the path of the Iguana... http://rebertia.com
-- http://mail.python.org/mailman/listinfo/python-list