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