Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > How to create a dict based on such a file?

Reply
Thread Tools

How to create a dict based on such a file?

 
 
Wang Coeus
Guest
Posts: n/a
 
      02-14-2011
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!
--
Coeus
In the middle of every difficulty lies opportunity.
-- Albert Einstein

 
Reply With Quote
 
 
 
 
aspineux
Guest
Posts: n/a
 
      02-14-2011
On 14 fév, 06:47, Wang Coeus <(E-Mail Removed)> wrote:
> 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!
> --
> Coeus
> In the middle of every difficulty lies opportunity.
> * * * * * * * * -- Albert Einstein


 
Reply With Quote
 
 
 
 
Martin De Kauwe
Guest
Posts: n/a
 
      02-14-2011
On Feb 14, 6:10*pm, aspineux <(E-Mail Removed)> wrote:
> On 14 fév, 06:47, Wang Coeus <(E-Mail Removed)> wrote:
>
> > 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!
> > --
> > Coeus
> > In the middle of every difficulty lies opportunity.
> > * * * * * * * * -- Albert Einstein


configobj is even better, very similar usage.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How include a large array? Edward A. Falk C Programming 1 04-04-2013 08:07 PM
Re: How to create a dict based on such a file? Dan Stromberg Python 6 02-15-2011 05:36 AM
dict.has_key(x) versus 'x in dict' Paul Melis Python 48 12-15-2006 05:55 PM
dict!ident as equivalent of dict["ident"] Alexander Kozlovsky Python 5 05-22-2006 08:06 AM
Re: dict->XML->dict? Or, passing small hashes through text? Skip Montanaro Python 0 08-15-2003 03:46 PM



Advertisments