Is there a better/simpler way to filter blank lines?

tmallen thomasmallen at gmail.com
Tue Nov 4 18:54:27 EST 2008


Between this info and http://www.python.org/doc/2.5.2/tut/node11.html#SECTION00111000000000000000000
, I'm starting to understand how I'll use generators (I've seen them
mentioned before, but never used them knowingly).

> list_o_lines = [line for line in open(filename) if line.strip()]

+1 for "list_o_lines"

Thanks for the help!
Thomas

On Nov 4, 6:36 pm, Falcolas <garri... at gmail.com> wrote:
> On Nov 4, 3:30 pm, tmallen <thomasmal... at gmail.com> wrote:
>
>
>
> > On Nov 4, 4:30 pm, bearophileH... at lycos.com wrote:
>
> > > tmallen:
>
> > > > I'm parsing some text files, and I want to strip blank lines in the
> > > > process. Is there a simpler way to do this than what I have here?
> > > > lines = filter(lambda line: len(line.strip()) > 0, lines)
>
> > > xlines = (line for line in open(filename) if line.strip())
>
> > > Bye,
> > > bearophile
>
> > I must be missing something:
>
> > >>> xlines = (line for line in open("new.data") if line.strip())
> > >>> xlines
>
> > <generator object at 0x6b648>>>> xlines.sort()
>
> > Traceback (most recent call last):
> >   File "<stdin>", line 1, in <module>
> > AttributeError: 'generator' object has no attribute 'sort'
>
> > What do you think?
>
> > Thomas
>
> Using the surrounding parentheses creates a generator object, whereas
> using square brackets would create a list. So, if you want to run list
> operations on the resulting object, you'll want to use the list
> comprehension instead.
>
> i.e.
>
> list_o_lines = [line for line in open(filename) if line.strip()]
>
> Downside is the increased memory usage and processing time as you dump
> the entire file into memory, whereas if you plan to do a "for line in
> xlines:" operation, it would be faster to use the generator.




More information about the Python-list mailing list