quickly read a formated file?

rzed rzantow at gmail.com
Thu Mar 1 06:53:28 EST 2007


bearophileHUGS at lycos.com wrote in
news:1172740062.523000.209320 at 8g2000cwh.googlegroups.com: 

> lialie:
>> The formated file may be very popularly, but the module
>> ConfigPaser doesn't handle it. Is there a way to process it
>> freely? 
> 
> First try, assuming the input file can be read whole. The code
> isn't much readable, it needs better variable names (name
> names?), comments, etc.
> 
> data = """
> %HEADER
> title1 = "Untilted1"
> username = "User1"
> 
> %DATA
> title2 = "Untilted2"
> username2 = "User2"
> """
> 
> l1 = (p.strip().splitlines() for p in data.split("%") if
> p.strip()) result = {}
> for part in l1:
>     pairs1 = (pair.split('=') for pair in part[1:])
>     pairs2 = ((k.strip(), v.strip().strip('"')) for k,v in 
pairs1) result[part[0]] = dict(pairs2)
> print result
> 
> 

If there could be embedded perecent signs in the data, that will 
produce some unexpected results, though. Here's another shot:

data = """
%HEADER
title1 = "Untilted1"
username = "User1"

%DATA
title2 = "The 7% Solution"
username2 = "User2"
"""

# Assumes there may be embedded percent signs in data
# and all data lines are of the form key = value
def parseData(data):
    pd = {}
    idata = iter(data)
    for line in idata:
        line = line.strip()
        if line.startswith('%'):
            tname = line[1:]
            cd = pd[tname] = {}
            line = idata.next().strip()
            while line != '':
                if line.find('=') > 0:
                    id,val = line.split('=',1)
                    cd[id.strip()] = val.strip().strip('"')
                line = idata.next().strip()
    return pd


print parseData(data.split('\n'))




More information about the Python-list mailing list