31

Is it possible to read the configuration for ConfigParser from a string or list?
Without any kind of temporary file on a filesystem

OR
Is there any similar solution for this?

3 Answers 3

48

You could use a buffer which behaves like a file: Python 3 solution

import configparser import io s_config = """ [example] is_real: False """ buf = io.StringIO(s_config) config = configparser.ConfigParser() config.read_file(buf) print(config.getboolean('example', 'is_real')) 

In Python 2.7, this implementation was correct:

import ConfigParser import StringIO s_config = """ [example] is_real: False """ buf = StringIO.StringIO(s_config) config = ConfigParser.ConfigParser() config.readfp(buf) print config.getboolean('example', 'is_real') 
Sign up to request clarification or add additional context in comments.

4 Comments

well where to use the buffer? ConfigParser.Read() excepts a file name.
cStringIO objects are not buffers. Strings are buffers, but buffers cannot be used where file-like objects are required; cStringIO wraps a buffer in order to make it behave like a file. Besides, your example does not demonstrate how a cStringIO behaves like a file; getvalue is a method specific to cStringIO instances, but files don't have it.
@Lucas I've posted a complete example that takes a StringIO buffer and gets a sample value
Note that config.readfp is deprecated in favor of config.read_file as of Python 3.2
36

The question was tagged as python-2.7 but just for the sake of completeness: Since 3.2 you can use the ConfigParser function read_string() so you don't need the StringIO method anymore.

import configparser s_config = """ [example] is_real: False """ config = configparser.ConfigParser() config.read_string(s_config) print(config.getboolean('example', 'is_real')) 

2 Comments

1 more reason I hate working with Python 2.7 still (thanks RHEL 7)
To be fair to RHEL7, it's perfectly possibly to install Python 3.x. developers.redhat.com/blog/2018/08/13/install-python3-rhel
1

Python has read_string and read_dict since version 3.2. It does not support reading from lists.

The example shows reading from a dictionary. Keys are section names, values are dictionaries with keys and values that should be present in the section.

#!/usr/bin/env python3 import configparser cfg_data = { 'mysql': {'host': 'localhost', 'user': 'user7', 'passwd': 's$cret', 'db': 'ydb'} } config = configparser.ConfigParser() config.read_dict(cfg_data) host = config['mysql']['host'] user = config['mysql']['user'] passwd = config['mysql']['passwd'] db = config['mysql']['db'] print(f'Host: {host}') print(f'User: {user}') print(f'Password: {passwd}') print(f'Database: {db}') 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.