Updated configparser from stdlib for earlier Pythons with enhanced configuration file parsing capabilities.
—
Quality
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Methods for reading configuration data from various sources (files, strings, dictionaries) and writing configuration data back to files. These operations form the core I/O capabilities of the configparser library.
Load configuration data from one or more files, with support for encoding specification and error handling.
def read(filenames, encoding=None):
"""
Read and parse configuration files.
Parameters:
- filenames: str or iterable of str, file paths to read
- encoding: str, text encoding (defaults to locale default)
Returns:
list of str: successfully read file names
Notes:
- Non-existent files are silently ignored
- Later files override earlier ones for duplicate options
"""
def read_file(f, source=None):
"""
Read configuration from a file-like object.
Parameters:
- f: file-like object, must have readline() method
- source: str, name for error messages (defaults to f.name)
Returns:
None
Raises:
- ParsingError: if file cannot be parsed
"""Load configuration data from string literals or dictionary objects, useful for programmatic configuration.
def read_string(string, source='<string>'):
"""
Read configuration from a string.
Parameters:
- string: str, configuration data in INI format
- source: str, name for error messages
Returns:
None
Raises:
- ParsingError: if string cannot be parsed
"""
def read_dict(dictionary, source='<dict>'):
"""
Read configuration from a dictionary.
Parameters:
- dictionary: dict, nested dictionary {section: {option: value}}
- source: str, name for error messages
Returns:
None
Notes:
- Dictionary keys become section names
- Nested dictionary values become options
- All keys and values are converted to strings
"""Save configuration data to files in standard INI format.
def write(fp, space_around_delimiters=True):
"""
Write configuration to a file-like object.
Parameters:
- fp: file-like object, must have write() method
- space_around_delimiters: bool, add spaces around '=' in output
Returns:
None
Notes:
- Writes in standard INI format
- DEFAULT section is written first if present
- Comments and original formatting are not preserved
"""from backports import configparser
config = configparser.ConfigParser()
# Read from multiple files (later files override earlier ones)
files_read = config.read(['default.ini', 'user.ini', 'local.ini'])
print(f"Successfully read: {files_read}")
# Read with explicit encoding
config.read('config.ini', encoding='utf-8')from backports import configparser
import io
config = configparser.ConfigParser()
# Read from file object
with open('config.ini', 'r', encoding='utf-8') as f:
config.read_file(f)
# Read from StringIO
config_data = """
[section1]
option1 = value1
option2 = value2
"""
config.read_file(io.StringIO(config_data), source='memory')from backports import configparser
config = configparser.ConfigParser()
# Read configuration from string
config_string = '''
[database]
host = localhost
port = 5432
name = myapp
[cache]
enabled = true
timeout = 300
'''
config.read_string(config_string)from backports import configparser
config = configparser.ConfigParser()
# Read from dictionary
config_dict = {
'database': {
'host': 'localhost',
'port': '5432',
'name': 'myapp'
},
'cache': {
'enabled': 'true',
'timeout': '300'
}
}
config.read_dict(config_dict)from backports import configparser
config = configparser.ConfigParser()
config.add_section('database')
config.set('database', 'host', 'localhost')
config.set('database', 'port', '5432')
# Write to file
with open('output.ini', 'w') as f:
config.write(f)
# Write to string
import io
output = io.StringIO()
config.write(output, space_around_delimiters=False)
config_string = output.getvalue()from backports import configparser
config = configparser.ConfigParser()
try:
config.read('nonexistent.ini') # Silently ignores missing files
config.read_string('invalid [section without closing bracket')
except configparser.ParsingError as e:
print(f"Parsing error: {e}")
for filename, lineno, line in e.errors:
print(f"File: {filename}, Line {lineno}: {line}")Install with Tessl CLI
npx tessl i tessl/pypi-configparser