Splitting a list of strings

Sean Ross sross at connectmail.carleton.ca
Tue Sep 17 19:59:54 EDT 2002

I need to read a list of strings from a file, weed out the comments and
separate "attribute" descriptions from the data. I have a working
implementation, but I'm interested in finding out if there's a better way to
do it.

Here's the code:

def getDataAndAttributes(filename):
    "Filters *.arff file into lists of data and attribute strings"
    lines = open(filename).readlines()

    # All lines beginning with "@'" are attributes, except the last one.
    attributes = [str for str in lines if str[0] == "@"]
    # Remove attributes from lines, so we don't process them again to find
    lines = [str for str in lines if not str in attributes]
    attributes = attributes[:-1]

    # Filter comments out to get data.
    data = [str for str in lines if not str[0]=="%" ]

    return (data, attributes)

What I'm interested in knowing is, can I extract all of the "attribute"
strings from lines in such a way that I get my list of "attribute" strings,
but all of those strings have been removed from lines as well, all at the
same time? i.e., without filtering the list a second time. As I've stated,
the code above works, but I'm concerned that it may be sub-optimal.

Thanks, in advance, for your suggestions,
Sean Ross

More information about the Python-list mailing list