On Fri, 29 May 2009 11:44:30 +0100, Marius Retegan <marius.s.rete...@gmail.com> wrote:

Hi,

On Fri, May 29, 2009 at 2:09 AM, Gary Herron <gher...@islandtraining.com>wrote:

Marius Retegan wrote:

Hello
I have simple text file that I have to parse. It looks something like
this:

parameters1
    key1 value1
    key2 value2
end

parameters2
    key1 value1
    key2 value2
end

So I want to create two dictionaries parameters1={key1:value1,
key2:value2} and the same for parameters2.

I would appreciate any help that could help me solve this.
Thank you



This looks like a homework problem.


It's not. I'm passed homework age.


But even if it's not, you are not likely to find someone who is willing
to put more work into this problem than you have.
So why don't you show us what you've tried, and see if someone is willing
to make suggestions or answer specific question about your attempt at a
solution?


I don't now if posting a code that gets into a while loop and never stops
would demonstrate to you that I've tried.

It would have.  At the very least, it would have told us that you've
missed a common idiom.

Be assured that before posting to
the list I did try to solve it myself, because I knew that I might get an
answer like RTFM or similar.

Not posting code (or code snippets at least) makes it more likely that you'll
be told to RTFM, you do realise!

Maybe I'm not smart enough, but I can't make python to start reading after the "parameter1" line and stop at the "end" line. That's all I want a small
piece of pseudocode to do just that.


I'd be tempted to do it like this

dict_of_dicts = {}
current_dict = {}
current_name = "dummy"

f = open(filename)
for line in f:
  # Do something to skip blank lines
  if line == '\n':
    continue

  # A normal 'key value' pair?
  if line.startswith(' '):
    # Yup.  Split apart the key and value,
    # and add them to the current dictionary
    current_dict.update([line.split()])
  elif line == 'end':
    # Wrap up what we've got and save the dictionary
    dict_of_dicts[current_name] = current_dict
    current_name = dummy
    current_dict = {}
  else:
    # New section.  Really ought to whinge if
    # we haven't ended the old section.
    current_name = line.strip()
    current_dict = {}

You can then pull the parameter sets you want out of
dict_of_dicts (you can probably think of a more meaningful
name for it, but I don't know the context you're working in).
In real code I would use regular expressions rather than
`startswith` and the equality because they cope more easily
with tabs, newlines and other 'invisible' whitespace.

--
Rhodri James *-* Wildebeeste Herder to the Masses
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to