Config files with different types

Javier Collado javier.collado at gmail.com
Fri Jul 3 02:55:28 EDT 2009


Hello,

Have you considered using something that is already developed?

You could take a look at this presentation for an overview of what's available:
http://us.pycon.org/2009/conference/schedule/event/5/

Anyway, let me explain that, since I "discovered" it, my favourite
format for configuration files is yaml (http://yaml.org/,
http://pyyaml.org/). It's easy to read, easy to write, available in
different programming languagues, etc. In addition to this, type
conversion is already in place so I think it covers your requirement.
For example:

IIn [1]: import yaml

In [2]: yaml.load("""name: person name
   ...: age: 25
   ...: is_programmer: true""")
Out[2]: {'age': 25, 'is_programmer': True, 'name': 'person name'}

Best regards,
    Javier

2009/7/2 Zach Hobesh <hobesh at gmail.com>:
> Hi all,
>
> I've written a function that reads a specifically formatted text file
> and spits out a dictionary.  Here's an example:
>
> config.txt:
>
> Destination = C:/Destination
> Overwrite = True
>
>
> Here's my function that takes 1 argument (text file)
>
> the_file = open(textfile,'r')
> linelist = the_file.read().split('\n')
> the_file.close()
> configs = {}
> for line in linelist:
>       try:
>              key,value = line.split('=')
>              key.strip()
>              value.strip()
>              key.lower()
>              value.lower()
>              configs[key] = value
>
>       except ValueError:
>              break
>
> so I call this on my config file, and then I can refer back to any
> config in my script like this:
>
> shutil.move(your_file,configs['destination'])
>
> which I like because it's very clear and readable.
>
> So this works great for simple text config files.  Here's how I want
> to improve it:
>
> I want to be able to look at the value and determine what type it
> SHOULD be.  Right now, configs['overwrite'] = 'true' (a string) when
> it might be more useful as a boolean.  Is there a quick way to do
> this?  I'd also like to able to read '1' as an in, '1.0' as a float,
> etc...
>
> I remember once I saw a script that took a string and tried int(),
> float() wrapped in a try except, but I was wondering if there was a
> more direct way.
>
> Thanks in advance,
>
> Zach
> --
> http://mail.python.org/mailman/listinfo/python-list
>



More information about the Python-list mailing list