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