configparser can read INI-style text and combine a default section with a selected profile.

Config Profile Overlay

config_profile_overlay.py
import configparser

text = """
[defaults]
host = localhost
port = 8000
debug = false

[dev]
debug = true
port = 8001

[prod]
host = example.com
port = 443
"""

profile = 

config = configparser.ConfigParser()
config.read_string(text)

settings = dict(config["defaults"])
settings.update(config[profile])

print("profile=" + profile)
print("host=" + settings["host"])
print("port=" + settings["port"])
print("debug=" + settings["debug"])
import configparser

text = """
[defaults]
host = localhost
port = 8000
debug = false

[dev]
debug = true
port = 8001

[prod]
host = example.com
port = 443
"""

profile = 

config = configparser.ConfigParser()
config.read_string(text)

settings = dict(config["defaults"])
settings.update(config[profile])

print("profile=" + profile)
print("host=" + settings["host"])
print("port=" + settings["port"])
print("debug=" + settings["debug"])
config profile A profile stores named settings that override shared defaults.