469,626 Members | 877 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,626 developers. It's quick & easy.

quickly read a formated file?

Hi,
Is there a fine way to read a formated file like:
%HEADER
title = "Untilted"
username = "User"

%DATA
.......
.......
The formated file may be very popularly, but the module ConfigPaser
doesn't handle it. Is there a way to process it freely?

Mar 1 '07 #1
3 1190
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
All done lazily for your better comfort :-)

Bye,
bearophile

Mar 1 '07 #2
be************@lycos.com wrote in
news:11**********************@8g2000cwh.googlegrou ps.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'))

Mar 1 '07 #3
rzed kirjoitti:
be************@lycos.com wrote in
news:11**********************@8g2000cwh.googlegrou ps.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:
<snip>

The solution of bearophile only needs 2 small modifications to handle this:

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

%DATA
title2 = "Untilted2"
username2 = "User2 10 %"
"""

# Ensure data starts with a newline
data = '\n' + data

# Split using '\n%' instead of '%'
l1 = (p.strip().splitlines() for p in data.split("\n%") 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
#=========================================

Cheers,
Jussi
Mar 1 '07 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

3 posts views Thread by Don Grover | last post: by
2 posts views Thread by Hawre Jawhar | last post: by
3 posts views Thread by sb Luis | last post: by
3 posts views Thread by nsc | last post: by
2 posts views Thread by peter.vanna | last post: by
3 posts views Thread by wang frank | last post: by
reply views Thread by gheharukoh7 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.