How to create a dict based on such a file?

W

Wang Coeus

Hi all,
I am new to python. Currently I encountered a problem, please help me to
solve this. Thanks in advance!
I have a file like below:
++++++++++++++++++++++++++++++++++++++
block1
{
key1=value1
key2=value2
key3=value3
}
block2
{
key1=value4
key2=value5
key4=value6
}
....
blockn
{
key1=value7
key2=value8
keyn=valuen
}
+++++++++++++++++++++++++++++++++++++++
Different block may have different keys and even same key in different
blocks may have different values.

Now I want to get a function, which like this:
func(key)
and it will return a dictionary as below:
func(key1) = [block1:value1,block2:value4,...,blockn:value7]
and if one block has no "key1" parameter, it will not include in this
dict.

Thanks a lot!
 
A

aspineux

Hi all,
I am new to python. Currently I encountered a problem, please help me to
solve this. Thanks in advance!
I have a file like below:

ConfigParser Library does exacly what you want but with .ini file
format
[block1]
key1=value1
key2=value2
....

Can you change the format of your file ? If so

import ConfigParser
config=ConfigParser.RawConfigParser(config_default)
try:
config.readfp(open(filename, 'r'))
except Exception, e:
logging.error('error reading configuration file %s: %s', filename,
e)
sys.exit(1)

def func(config, key1):
result={}
for section in config.sections():
if config.has_option(section, key1):
result[section]=config.get(section, key1)
return result


If not, you need to parse youre file, and the some question :
How or what generate this file, is it always the same format ? Could
it chnage, for exemple for

block1 { key1=value1 key2=value2 }

or at least

block1 {

key1=value1
key2=value2


}

Is-it big, too big to keep in memory ?


++++++++++++++++++++++++++++++++++++++
block1
{
  key1=value1
  key2=value2
  key3=value3}

block2
{
  key1=value4
  key2=value5
  key4=value6}

...
blockn
{
  key1=value7
  key2=value8
  keyn=valuen}

+++++++++++++++++++++++++++++++++++++++
Different block may have different keys and even same key in different
blocks may have different values.

Now I want to get a function, which like this:
func(key)
and it will return a dictionary as below:
func(key1) = [block1:value1,block2:value4,...,blockn:value7]
and if one block has no "key1" parameter, it will not include in this
dict.

Thanks a lot!
 
M

Martin De Kauwe

Hi all,
I am new to python. Currently I encountered a problem, please help me to
solve this. Thanks in advance!
I have a file like below:

ConfigParser Library does exacly what you want but with .ini file
format
[block1]
key1=value1
key2=value2
...

Can you change the format of your file ? If so

import ConfigParser
config=ConfigParser.RawConfigParser(config_default)
try:
    config.readfp(open(filename, 'r'))
except Exception, e:
    logging.error('error reading configuration file %s: %s', filename,
e)
    sys.exit(1)

def func(config, key1):
    result={}
    for section in config.sections():
        if config.has_option(section, key1):
            result[section]=config.get(section, key1)
    return result

If not, you need to parse youre file, and the some question :
How or what generate this file, is it always the same format ? Could
it chnage, for exemple for

block1 { key1=value1 key2=value2 }

or at least

block1 {

key1=value1
key2=value2

}

Is-it big, too big to keep in memory ?


++++++++++++++++++++++++++++++++++++++
block1
{
  key1=value1
  key2=value2
  key3=value3}
block2
{
  key1=value4
  key2=value5
  key4=value6}
...
blockn
{
  key1=value7
  key2=value8
  keyn=valuen}
+++++++++++++++++++++++++++++++++++++++
Different block may have different keys and even same key in different
blocks may have different values.
Now I want to get a function, which like this:
func(key)
and it will return a dictionary as below:
func(key1) = [block1:value1,block2:value4,...,blockn:value7]
and if one block has no "key1" parameter, it will not include in this
dict.
Thanks a lot!

configobj is even better, very similar usage.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,012
Latest member
RoxanneDzm

Latest Threads

Top