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

Falcolas garrickp at gmail.com
Tue Nov 4 18:36:27 EST 2008


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