1713 lines
173 KiB
HTML
1713 lines
173 KiB
HTML
<!DOCTYPE html>
|
||
|
||
<html lang="en" data-content_root="../">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
<meta property="og:title" content="configparser — Configuration file parser" />
|
||
<meta property="og:type" content="website" />
|
||
<meta property="og:url" content="https://docs.python.org/3/library/configparser.html" />
|
||
<meta property="og:site_name" content="Python documentation" />
|
||
<meta property="og:description" content="Source code: Lib/configparser.py This module provides the ConfigParser class which implements a basic configuration language which provides a structure similar to what’s found in Microsoft Windows ..." />
|
||
<meta property="og:image" content="https://docs.python.org/3/_static/og-image.png" />
|
||
<meta property="og:image:alt" content="Python documentation" />
|
||
<meta name="description" content="Source code: Lib/configparser.py This module provides the ConfigParser class which implements a basic configuration language which provides a structure similar to what’s found in Microsoft Windows ..." />
|
||
<meta property="og:image:width" content="200">
|
||
<meta property="og:image:height" content="200">
|
||
<meta name="theme-color" content="#3776ab">
|
||
|
||
<title>configparser — Configuration file parser — Python 3.13.3 documentation</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
|
||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b86133f3" />
|
||
<link rel="stylesheet" type="text/css" href="../_static/pydoctheme.css?v=23252803" />
|
||
<link id="pygments_dark_css" media="(prefers-color-scheme: dark)" rel="stylesheet" type="text/css" href="../_static/pygments_dark.css?v=5349f25f" />
|
||
|
||
<script src="../_static/documentation_options.js?v=5d57ca2d"></script>
|
||
<script src="../_static/doctools.js?v=9bcbadda"></script>
|
||
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||
|
||
<script src="../_static/sidebar.js"></script>
|
||
|
||
<link rel="search" type="application/opensearchdescription+xml"
|
||
title="Search within Python 3.13.3 documentation"
|
||
href="../_static/opensearch.xml"/>
|
||
<link rel="author" title="About these documents" href="../about.html" />
|
||
<link rel="index" title="Index" href="../genindex.html" />
|
||
<link rel="search" title="Search" href="../search.html" />
|
||
<link rel="copyright" title="Copyright" href="../copyright.html" />
|
||
<link rel="next" title="tomllib — Parse TOML files" href="tomllib.html" />
|
||
<link rel="prev" title="csv — CSV File Reading and Writing" href="csv.html" />
|
||
|
||
<link rel="canonical" href="https://docs.python.org/3/library/configparser.html">
|
||
|
||
|
||
|
||
|
||
|
||
<style>
|
||
@media only screen {
|
||
table.full-width-table {
|
||
width: 100%;
|
||
}
|
||
}
|
||
</style>
|
||
<link rel="stylesheet" href="../_static/pydoctheme_dark.css" media="(prefers-color-scheme: dark)" id="pydoctheme_dark_css">
|
||
<link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
|
||
<script type="text/javascript" src="../_static/copybutton.js"></script>
|
||
<script type="text/javascript" src="../_static/menu.js"></script>
|
||
<script type="text/javascript" src="../_static/search-focus.js"></script>
|
||
<script type="text/javascript" src="../_static/themetoggle.js"></script>
|
||
<script type="text/javascript" src="../_static/rtd_switcher.js"></script>
|
||
<meta name="readthedocs-addons-api-version" content="1">
|
||
|
||
</head>
|
||
<body>
|
||
<div class="mobile-nav">
|
||
<input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
|
||
aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
|
||
<nav class="nav-content" role="navigation">
|
||
<label for="menuToggler" class="toggler__label">
|
||
<span></span>
|
||
</label>
|
||
<span class="nav-items-wrapper">
|
||
<a href="https://www.python.org/" class="nav-logo">
|
||
<img src="../_static/py.svg" alt="Python logo"/>
|
||
</a>
|
||
<span class="version_switcher_placeholder"></span>
|
||
<form role="search" class="search" action="../search.html" method="get">
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
|
||
<path fill-rule="nonzero" fill="currentColor" d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path>
|
||
</svg>
|
||
<input placeholder="Quick search" aria-label="Quick search" type="search" name="q" />
|
||
<input type="submit" value="Go"/>
|
||
</form>
|
||
</span>
|
||
</nav>
|
||
<div class="menu-wrapper">
|
||
<nav class="menu" role="navigation" aria-label="main navigation">
|
||
<div class="language_switcher_placeholder"></div>
|
||
|
||
<label class="theme-selector-label">
|
||
Theme
|
||
<select class="theme-selector" oninput="activateTheme(this.value)">
|
||
<option value="auto" selected>Auto</option>
|
||
<option value="light">Light</option>
|
||
<option value="dark">Dark</option>
|
||
</select>
|
||
</label>
|
||
<div>
|
||
<h3><a href="../contents.html">Table of Contents</a></h3>
|
||
<ul>
|
||
<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">configparser</span></code> — Configuration file parser</a><ul>
|
||
<li><a class="reference internal" href="#quick-start">Quick Start</a></li>
|
||
<li><a class="reference internal" href="#supported-datatypes">Supported Datatypes</a></li>
|
||
<li><a class="reference internal" href="#fallback-values">Fallback Values</a></li>
|
||
<li><a class="reference internal" href="#supported-ini-file-structure">Supported INI File Structure</a></li>
|
||
<li><a class="reference internal" href="#unnamed-sections">Unnamed Sections</a></li>
|
||
<li><a class="reference internal" href="#interpolation-of-values">Interpolation of values</a></li>
|
||
<li><a class="reference internal" href="#mapping-protocol-access">Mapping Protocol Access</a></li>
|
||
<li><a class="reference internal" href="#customizing-parser-behaviour">Customizing Parser Behaviour</a></li>
|
||
<li><a class="reference internal" href="#legacy-api-examples">Legacy API Examples</a></li>
|
||
<li><a class="reference internal" href="#configparser-objects">ConfigParser Objects</a></li>
|
||
<li><a class="reference internal" href="#rawconfigparser-objects">RawConfigParser Objects</a></li>
|
||
<li><a class="reference internal" href="#exceptions">Exceptions</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
</div>
|
||
<div>
|
||
<h4>Previous topic</h4>
|
||
<p class="topless"><a href="csv.html"
|
||
title="previous chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">csv</span></code> — CSV File Reading and Writing</a></p>
|
||
</div>
|
||
<div>
|
||
<h4>Next topic</h4>
|
||
<p class="topless"><a href="tomllib.html"
|
||
title="next chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">tomllib</span></code> — Parse TOML files</a></p>
|
||
</div>
|
||
<div role="note" aria-label="source link">
|
||
<h3>This Page</h3>
|
||
<ul class="this-page-menu">
|
||
<li><a href="../bugs.html">Report a Bug</a></li>
|
||
<li>
|
||
<a href="https://github.com/python/cpython/blob/main/Doc/library/configparser.rst"
|
||
rel="nofollow">Show Source
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<div class="related" role="navigation" aria-label="Related">
|
||
<h3>Navigation</h3>
|
||
<ul>
|
||
<li class="right" style="margin-right: 10px">
|
||
<a href="../genindex.html" title="General Index"
|
||
accesskey="I">index</a></li>
|
||
<li class="right" >
|
||
<a href="../py-modindex.html" title="Python Module Index"
|
||
>modules</a> |</li>
|
||
<li class="right" >
|
||
<a href="tomllib.html" title="tomllib — Parse TOML files"
|
||
accesskey="N">next</a> |</li>
|
||
<li class="right" >
|
||
<a href="csv.html" title="csv — CSV File Reading and Writing"
|
||
accesskey="P">previous</a> |</li>
|
||
|
||
<li><img src="../_static/py.svg" alt="Python logo" style="vertical-align: middle; margin-top: -1px"/></li>
|
||
<li><a href="https://www.python.org/">Python</a> »</li>
|
||
<li class="switchers">
|
||
<div class="language_switcher_placeholder"></div>
|
||
<div class="version_switcher_placeholder"></div>
|
||
</li>
|
||
<li>
|
||
|
||
</li>
|
||
<li id="cpython-language-and-version">
|
||
<a href="../index.html">3.13.3 Documentation</a> »
|
||
</li>
|
||
|
||
<li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
|
||
<li class="nav-item nav-item-2"><a href="fileformats.html" accesskey="U">File Formats</a> »</li>
|
||
<li class="nav-item nav-item-this"><a href=""><code class="xref py py-mod docutils literal notranslate"><span class="pre">configparser</span></code> — Configuration file parser</a></li>
|
||
<li class="right">
|
||
|
||
|
||
<div class="inline-search" role="search">
|
||
<form class="inline-search" action="../search.html" method="get">
|
||
<input placeholder="Quick search" aria-label="Quick search" type="search" name="q" id="search-box" />
|
||
<input type="submit" value="Go" />
|
||
</form>
|
||
</div>
|
||
|
|
||
</li>
|
||
<li class="right">
|
||
<label class="theme-selector-label">
|
||
Theme
|
||
<select class="theme-selector" oninput="activateTheme(this.value)">
|
||
<option value="auto" selected>Auto</option>
|
||
<option value="light">Light</option>
|
||
<option value="dark">Dark</option>
|
||
</select>
|
||
</label> |</li>
|
||
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="document">
|
||
<div class="documentwrapper">
|
||
<div class="bodywrapper">
|
||
<div class="body" role="main">
|
||
|
||
<section id="module-configparser">
|
||
<span id="configparser-configuration-file-parser"></span><h1><code class="xref py py-mod docutils literal notranslate"><span class="pre">configparser</span></code> — Configuration file parser<a class="headerlink" href="#module-configparser" title="Link to this heading">¶</a></h1>
|
||
<p><strong>Source code:</strong> <a class="extlink-source reference external" href="https://github.com/python/cpython/tree/3.13/Lib/configparser.py">Lib/configparser.py</a></p>
|
||
<hr class="docutils" id="index-0" />
|
||
<p>This module provides the <a class="reference internal" href="#configparser.ConfigParser" title="configparser.ConfigParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">ConfigParser</span></code></a> class which implements a basic
|
||
configuration language which provides a structure similar to what’s found in
|
||
Microsoft Windows INI files. You can use this to write Python programs which
|
||
can be customized by end users easily.</p>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">Note</p>
|
||
<p>This library does <em>not</em> interpret or write the value-type prefixes used in
|
||
the Windows Registry extended version of INI syntax.</p>
|
||
</div>
|
||
<div class="admonition seealso">
|
||
<p class="admonition-title">See also</p>
|
||
<dl class="simple">
|
||
<dt>Module <a class="reference internal" href="tomllib.html#module-tomllib" title="tomllib: Parse TOML files."><code class="xref py py-mod docutils literal notranslate"><span class="pre">tomllib</span></code></a></dt><dd><p>TOML is a well-specified format for application configuration files.
|
||
It is specifically designed to be an improved version of INI.</p>
|
||
</dd>
|
||
<dt>Module <a class="reference internal" href="shlex.html#module-shlex" title="shlex: Simple lexical analysis for Unix shell-like languages."><code class="xref py py-mod docutils literal notranslate"><span class="pre">shlex</span></code></a></dt><dd><p>Support for creating Unix shell-like mini-languages which can also
|
||
be used for application configuration files.</p>
|
||
</dd>
|
||
<dt>Module <a class="reference internal" href="json.html#module-json" title="json: Encode and decode the JSON format."><code class="xref py py-mod docutils literal notranslate"><span class="pre">json</span></code></a></dt><dd><p>The <code class="docutils literal notranslate"><span class="pre">json</span></code> module implements a subset of JavaScript syntax which is
|
||
sometimes used for configuration, but does not support comments.</p>
|
||
</dd>
|
||
</dl>
|
||
</div>
|
||
<section id="quick-start">
|
||
<h2>Quick Start<a class="headerlink" href="#quick-start" title="Link to this heading">¶</a></h2>
|
||
<p>Let’s take a very basic configuration file that looks like this:</p>
|
||
<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[DEFAULT]</span>
|
||
<span class="na">ServerAliveInterval</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">45</span>
|
||
<span class="na">Compression</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">yes</span>
|
||
<span class="na">CompressionLevel</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">9</span>
|
||
<span class="na">ForwardX11</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">yes</span>
|
||
|
||
<span class="k">[forge.example]</span>
|
||
<span class="na">User</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">hg</span>
|
||
|
||
<span class="k">[topsecret.server.example]</span>
|
||
<span class="na">Port</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">50022</span>
|
||
<span class="na">ForwardX11</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">no</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>The structure of INI files is described <a class="reference external" href="#supported-ini-file-structure">in the following section</a>. Essentially, the file
|
||
consists of sections, each of which contains keys with values.
|
||
<a class="reference internal" href="#module-configparser" title="configparser: Configuration file parser."><code class="xref py py-mod docutils literal notranslate"><span class="pre">configparser</span></code></a> classes can read and write such files. Let’s start by
|
||
creating the above configuration file programmatically.</p>
|
||
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">import</span><span class="w"> </span><span class="nn">configparser</span>
|
||
<span class="gp">>>> </span><span class="n">config</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">()</span>
|
||
<span class="gp">>>> </span><span class="n">config</span><span class="p">[</span><span class="s1">'DEFAULT'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'ServerAliveInterval'</span><span class="p">:</span> <span class="s1">'45'</span><span class="p">,</span>
|
||
<span class="gp">... </span> <span class="s1">'Compression'</span><span class="p">:</span> <span class="s1">'yes'</span><span class="p">,</span>
|
||
<span class="gp">... </span> <span class="s1">'CompressionLevel'</span><span class="p">:</span> <span class="s1">'9'</span><span class="p">}</span>
|
||
<span class="gp">>>> </span><span class="n">config</span><span class="p">[</span><span class="s1">'forge.example'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||
<span class="gp">>>> </span><span class="n">config</span><span class="p">[</span><span class="s1">'forge.example'</span><span class="p">][</span><span class="s1">'User'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'hg'</span>
|
||
<span class="gp">>>> </span><span class="n">config</span><span class="p">[</span><span class="s1">'topsecret.server.example'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
|
||
<span class="gp">>>> </span><span class="n">topsecret</span> <span class="o">=</span> <span class="n">config</span><span class="p">[</span><span class="s1">'topsecret.server.example'</span><span class="p">]</span>
|
||
<span class="gp">>>> </span><span class="n">topsecret</span><span class="p">[</span><span class="s1">'Port'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'50022'</span> <span class="c1"># mutates the parser</span>
|
||
<span class="gp">>>> </span><span class="n">topsecret</span><span class="p">[</span><span class="s1">'ForwardX11'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'no'</span> <span class="c1"># same here</span>
|
||
<span class="gp">>>> </span><span class="n">config</span><span class="p">[</span><span class="s1">'DEFAULT'</span><span class="p">][</span><span class="s1">'ForwardX11'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'yes'</span>
|
||
<span class="gp">>>> </span><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'example.ini'</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">configfile</span><span class="p">:</span>
|
||
<span class="gp">... </span> <span class="n">config</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">configfile</span><span class="p">)</span>
|
||
<span class="gp">...</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>As you can see, we can treat a config parser much like a dictionary.
|
||
There are differences, <a class="reference external" href="#mapping-protocol-access">outlined later</a>, but
|
||
the behavior is very close to what you would expect from a dictionary.</p>
|
||
<p>Now that we have created and saved a configuration file, let’s read it
|
||
back and explore the data it holds.</p>
|
||
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">config</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">()</span>
|
||
<span class="gp">>>> </span><span class="n">config</span><span class="o">.</span><span class="n">sections</span><span class="p">()</span>
|
||
<span class="go">[]</span>
|
||
<span class="gp">>>> </span><span class="n">config</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="s1">'example.ini'</span><span class="p">)</span>
|
||
<span class="go">['example.ini']</span>
|
||
<span class="gp">>>> </span><span class="n">config</span><span class="o">.</span><span class="n">sections</span><span class="p">()</span>
|
||
<span class="go">['forge.example', 'topsecret.server.example']</span>
|
||
<span class="gp">>>> </span><span class="s1">'forge.example'</span> <span class="ow">in</span> <span class="n">config</span>
|
||
<span class="go">True</span>
|
||
<span class="gp">>>> </span><span class="s1">'python.org'</span> <span class="ow">in</span> <span class="n">config</span>
|
||
<span class="go">False</span>
|
||
<span class="gp">>>> </span><span class="n">config</span><span class="p">[</span><span class="s1">'forge.example'</span><span class="p">][</span><span class="s1">'User'</span><span class="p">]</span>
|
||
<span class="go">'hg'</span>
|
||
<span class="gp">>>> </span><span class="n">config</span><span class="p">[</span><span class="s1">'DEFAULT'</span><span class="p">][</span><span class="s1">'Compression'</span><span class="p">]</span>
|
||
<span class="go">'yes'</span>
|
||
<span class="gp">>>> </span><span class="n">topsecret</span> <span class="o">=</span> <span class="n">config</span><span class="p">[</span><span class="s1">'topsecret.server.example'</span><span class="p">]</span>
|
||
<span class="gp">>>> </span><span class="n">topsecret</span><span class="p">[</span><span class="s1">'ForwardX11'</span><span class="p">]</span>
|
||
<span class="go">'no'</span>
|
||
<span class="gp">>>> </span><span class="n">topsecret</span><span class="p">[</span><span class="s1">'Port'</span><span class="p">]</span>
|
||
<span class="go">'50022'</span>
|
||
<span class="gp">>>> </span><span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">config</span><span class="p">[</span><span class="s1">'forge.example'</span><span class="p">]:</span>
|
||
<span class="gp">... </span> <span class="nb">print</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
||
<span class="go">user</span>
|
||
<span class="go">compressionlevel</span>
|
||
<span class="go">serveraliveinterval</span>
|
||
<span class="go">compression</span>
|
||
<span class="go">forwardx11</span>
|
||
<span class="gp">>>> </span><span class="n">config</span><span class="p">[</span><span class="s1">'forge.example'</span><span class="p">][</span><span class="s1">'ForwardX11'</span><span class="p">]</span>
|
||
<span class="go">'yes'</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>As we can see above, the API is pretty straightforward. The only bit of magic
|
||
involves the <code class="docutils literal notranslate"><span class="pre">DEFAULT</span></code> section which provides default values for all other
|
||
sections <a class="footnote-reference brackets" href="#id16" id="id1" role="doc-noteref"><span class="fn-bracket">[</span>1<span class="fn-bracket">]</span></a>. Note also that keys in sections are
|
||
case-insensitive and stored in lowercase <a class="footnote-reference brackets" href="#id16" id="id2" role="doc-noteref"><span class="fn-bracket">[</span>1<span class="fn-bracket">]</span></a>.</p>
|
||
<p>It is possible to read several configurations into a single
|
||
<a class="reference internal" href="#configparser.ConfigParser" title="configparser.ConfigParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">ConfigParser</span></code></a>, where the most recently added configuration has the
|
||
highest priority. Any conflicting keys are taken from the more recent
|
||
configuration while the previously existing keys are retained. The example
|
||
below reads in an <code class="docutils literal notranslate"><span class="pre">override.ini</span></code> file, which will override any conflicting
|
||
keys from the <code class="docutils literal notranslate"><span class="pre">example.ini</span></code> file.</p>
|
||
<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[DEFAULT]</span>
|
||
<span class="na">ServerAliveInterval</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">-1</span>
|
||
</pre></div>
|
||
</div>
|
||
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">config_override</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">()</span>
|
||
<span class="gp">>>> </span><span class="n">config_override</span><span class="p">[</span><span class="s1">'DEFAULT'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'ServerAliveInterval'</span><span class="p">:</span> <span class="s1">'-1'</span><span class="p">}</span>
|
||
<span class="gp">>>> </span><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'override.ini'</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">configfile</span><span class="p">:</span>
|
||
<span class="gp">... </span> <span class="n">config_override</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">configfile</span><span class="p">)</span>
|
||
<span class="gp">...</span>
|
||
<span class="gp">>>> </span><span class="n">config_override</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">()</span>
|
||
<span class="gp">>>> </span><span class="n">config_override</span><span class="o">.</span><span class="n">read</span><span class="p">([</span><span class="s1">'example.ini'</span><span class="p">,</span> <span class="s1">'override.ini'</span><span class="p">])</span>
|
||
<span class="go">['example.ini', 'override.ini']</span>
|
||
<span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">config_override</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'DEFAULT'</span><span class="p">,</span> <span class="s1">'ServerAliveInterval'</span><span class="p">))</span>
|
||
<span class="go">-1</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>This behaviour is equivalent to a <a class="reference internal" href="#configparser.ConfigParser.read" title="configparser.ConfigParser.read"><code class="xref py py-meth docutils literal notranslate"><span class="pre">ConfigParser.read()</span></code></a> call with several
|
||
files passed to the <em>filenames</em> parameter.</p>
|
||
</section>
|
||
<section id="supported-datatypes">
|
||
<h2>Supported Datatypes<a class="headerlink" href="#supported-datatypes" title="Link to this heading">¶</a></h2>
|
||
<p>Config parsers do not guess datatypes of values in configuration files, always
|
||
storing them internally as strings. This means that if you need other
|
||
datatypes, you should convert on your own:</p>
|
||
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="nb">int</span><span class="p">(</span><span class="n">topsecret</span><span class="p">[</span><span class="s1">'Port'</span><span class="p">])</span>
|
||
<span class="go">50022</span>
|
||
<span class="gp">>>> </span><span class="nb">float</span><span class="p">(</span><span class="n">topsecret</span><span class="p">[</span><span class="s1">'CompressionLevel'</span><span class="p">])</span>
|
||
<span class="go">9.0</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Since this task is so common, config parsers provide a range of handy getter
|
||
methods to handle integers, floats and booleans. The last one is the most
|
||
interesting because simply passing the value to <code class="docutils literal notranslate"><span class="pre">bool()</span></code> would do no good
|
||
since <code class="docutils literal notranslate"><span class="pre">bool('False')</span></code> is still <code class="docutils literal notranslate"><span class="pre">True</span></code>. This is why config parsers also
|
||
provide <a class="reference internal" href="#configparser.ConfigParser.getboolean" title="configparser.ConfigParser.getboolean"><code class="xref py py-meth docutils literal notranslate"><span class="pre">getboolean()</span></code></a>. This method is case-insensitive and
|
||
recognizes Boolean values from <code class="docutils literal notranslate"><span class="pre">'yes'</span></code>/<code class="docutils literal notranslate"><span class="pre">'no'</span></code>, <code class="docutils literal notranslate"><span class="pre">'on'</span></code>/<code class="docutils literal notranslate"><span class="pre">'off'</span></code>,
|
||
<code class="docutils literal notranslate"><span class="pre">'true'</span></code>/<code class="docutils literal notranslate"><span class="pre">'false'</span></code> and <code class="docutils literal notranslate"><span class="pre">'1'</span></code>/<code class="docutils literal notranslate"><span class="pre">'0'</span></code> <a class="footnote-reference brackets" href="#id16" id="id3" role="doc-noteref"><span class="fn-bracket">[</span>1<span class="fn-bracket">]</span></a>. For example:</p>
|
||
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">topsecret</span><span class="o">.</span><span class="n">getboolean</span><span class="p">(</span><span class="s1">'ForwardX11'</span><span class="p">)</span>
|
||
<span class="go">False</span>
|
||
<span class="gp">>>> </span><span class="n">config</span><span class="p">[</span><span class="s1">'forge.example'</span><span class="p">]</span><span class="o">.</span><span class="n">getboolean</span><span class="p">(</span><span class="s1">'ForwardX11'</span><span class="p">)</span>
|
||
<span class="go">True</span>
|
||
<span class="gp">>>> </span><span class="n">config</span><span class="o">.</span><span class="n">getboolean</span><span class="p">(</span><span class="s1">'forge.example'</span><span class="p">,</span> <span class="s1">'Compression'</span><span class="p">)</span>
|
||
<span class="go">True</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Apart from <a class="reference internal" href="#configparser.ConfigParser.getboolean" title="configparser.ConfigParser.getboolean"><code class="xref py py-meth docutils literal notranslate"><span class="pre">getboolean()</span></code></a>, config parsers also
|
||
provide equivalent <a class="reference internal" href="#configparser.ConfigParser.getint" title="configparser.ConfigParser.getint"><code class="xref py py-meth docutils literal notranslate"><span class="pre">getint()</span></code></a> and
|
||
<a class="reference internal" href="#configparser.ConfigParser.getfloat" title="configparser.ConfigParser.getfloat"><code class="xref py py-meth docutils literal notranslate"><span class="pre">getfloat()</span></code></a> methods. You can register your own
|
||
converters and customize the provided ones. <a class="footnote-reference brackets" href="#id16" id="id4" role="doc-noteref"><span class="fn-bracket">[</span>1<span class="fn-bracket">]</span></a></p>
|
||
</section>
|
||
<section id="fallback-values">
|
||
<h2>Fallback Values<a class="headerlink" href="#fallback-values" title="Link to this heading">¶</a></h2>
|
||
<p>As with a dictionary, you can use a section’s <a class="reference internal" href="#configparser.ConfigParser.get" title="configparser.ConfigParser.get"><code class="xref py py-meth docutils literal notranslate"><span class="pre">get()</span></code></a> method to
|
||
provide fallback values:</p>
|
||
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">topsecret</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'Port'</span><span class="p">)</span>
|
||
<span class="go">'50022'</span>
|
||
<span class="gp">>>> </span><span class="n">topsecret</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'CompressionLevel'</span><span class="p">)</span>
|
||
<span class="go">'9'</span>
|
||
<span class="gp">>>> </span><span class="n">topsecret</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'Cipher'</span><span class="p">)</span>
|
||
<span class="gp">>>> </span><span class="n">topsecret</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'Cipher'</span><span class="p">,</span> <span class="s1">'3des-cbc'</span><span class="p">)</span>
|
||
<span class="go">'3des-cbc'</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Please note that default values have precedence over fallback values.
|
||
For instance, in our example the <code class="docutils literal notranslate"><span class="pre">'CompressionLevel'</span></code> key was
|
||
specified only in the <code class="docutils literal notranslate"><span class="pre">'DEFAULT'</span></code> section. If we try to get it from
|
||
the section <code class="docutils literal notranslate"><span class="pre">'topsecret.server.example'</span></code>, we will always get the default,
|
||
even if we specify a fallback:</p>
|
||
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">topsecret</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'CompressionLevel'</span><span class="p">,</span> <span class="s1">'3'</span><span class="p">)</span>
|
||
<span class="go">'9'</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>One more thing to be aware of is that the parser-level <a class="reference internal" href="#configparser.ConfigParser.get" title="configparser.ConfigParser.get"><code class="xref py py-meth docutils literal notranslate"><span class="pre">get()</span></code></a> method
|
||
provides a custom, more complex interface, maintained for backwards
|
||
compatibility. When using this method, a fallback value can be provided via
|
||
the <code class="docutils literal notranslate"><span class="pre">fallback</span></code> keyword-only argument:</p>
|
||
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'forge.example'</span><span class="p">,</span> <span class="s1">'monster'</span><span class="p">,</span>
|
||
<span class="gp">... </span> <span class="n">fallback</span><span class="o">=</span><span class="s1">'No such things as monsters'</span><span class="p">)</span>
|
||
<span class="go">'No such things as monsters'</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>The same <code class="docutils literal notranslate"><span class="pre">fallback</span></code> argument can be used with the
|
||
<a class="reference internal" href="#configparser.ConfigParser.getint" title="configparser.ConfigParser.getint"><code class="xref py py-meth docutils literal notranslate"><span class="pre">getint()</span></code></a>, <a class="reference internal" href="#configparser.ConfigParser.getfloat" title="configparser.ConfigParser.getfloat"><code class="xref py py-meth docutils literal notranslate"><span class="pre">getfloat()</span></code></a> and
|
||
<a class="reference internal" href="#configparser.ConfigParser.getboolean" title="configparser.ConfigParser.getboolean"><code class="xref py py-meth docutils literal notranslate"><span class="pre">getboolean()</span></code></a> methods, for example:</p>
|
||
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="s1">'BatchMode'</span> <span class="ow">in</span> <span class="n">topsecret</span>
|
||
<span class="go">False</span>
|
||
<span class="gp">>>> </span><span class="n">topsecret</span><span class="o">.</span><span class="n">getboolean</span><span class="p">(</span><span class="s1">'BatchMode'</span><span class="p">,</span> <span class="n">fallback</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||
<span class="go">True</span>
|
||
<span class="gp">>>> </span><span class="n">config</span><span class="p">[</span><span class="s1">'DEFAULT'</span><span class="p">][</span><span class="s1">'BatchMode'</span><span class="p">]</span> <span class="o">=</span> <span class="s1">'no'</span>
|
||
<span class="gp">>>> </span><span class="n">topsecret</span><span class="o">.</span><span class="n">getboolean</span><span class="p">(</span><span class="s1">'BatchMode'</span><span class="p">,</span> <span class="n">fallback</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||
<span class="go">False</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="supported-ini-file-structure">
|
||
<h2>Supported INI File Structure<a class="headerlink" href="#supported-ini-file-structure" title="Link to this heading">¶</a></h2>
|
||
<p>A configuration file consists of sections, each led by a <code class="docutils literal notranslate"><span class="pre">[section]</span></code> header,
|
||
followed by key/value entries separated by a specific string (<code class="docutils literal notranslate"><span class="pre">=</span></code> or <code class="docutils literal notranslate"><span class="pre">:</span></code> by
|
||
default <a class="footnote-reference brackets" href="#id16" id="id5" role="doc-noteref"><span class="fn-bracket">[</span>1<span class="fn-bracket">]</span></a>). By default, section names are case sensitive but keys are not
|
||
<a class="footnote-reference brackets" href="#id16" id="id6" role="doc-noteref"><span class="fn-bracket">[</span>1<span class="fn-bracket">]</span></a>. Leading and trailing whitespace is removed from keys and values.
|
||
Values can be omitted if the parser is configured to allow it <a class="footnote-reference brackets" href="#id16" id="id7" role="doc-noteref"><span class="fn-bracket">[</span>1<span class="fn-bracket">]</span></a>,
|
||
in which case the key/value delimiter may also be left
|
||
out. Values can also span multiple lines, as long as they are indented deeper
|
||
than the first line of the value. Depending on the parser’s mode, blank lines
|
||
may be treated as parts of multiline values or ignored.</p>
|
||
<p>By default, a valid section name can be any string that does not contain ‘\n’.
|
||
To change this, see <a class="reference internal" href="#configparser.ConfigParser.SECTCRE" title="configparser.ConfigParser.SECTCRE"><code class="xref py py-attr docutils literal notranslate"><span class="pre">ConfigParser.SECTCRE</span></code></a>.</p>
|
||
<p>The first section name may be omitted if the parser is configured to allow an
|
||
unnamed top level section with <code class="docutils literal notranslate"><span class="pre">allow_unnamed_section=True</span></code>. In this case,
|
||
the keys/values may be retrieved by <a class="reference internal" href="#configparser.UNNAMED_SECTION" title="configparser.UNNAMED_SECTION"><code class="xref py py-const docutils literal notranslate"><span class="pre">UNNAMED_SECTION</span></code></a> as in
|
||
<code class="docutils literal notranslate"><span class="pre">config[UNNAMED_SECTION]</span></code>.</p>
|
||
<p>Configuration files may include comments, prefixed by specific
|
||
characters (<code class="docutils literal notranslate"><span class="pre">#</span></code> and <code class="docutils literal notranslate"><span class="pre">;</span></code> by default <a class="footnote-reference brackets" href="#id16" id="id8" role="doc-noteref"><span class="fn-bracket">[</span>1<span class="fn-bracket">]</span></a>). Comments may appear on
|
||
their own on an otherwise empty line, possibly indented. <a class="footnote-reference brackets" href="#id16" id="id9" role="doc-noteref"><span class="fn-bracket">[</span>1<span class="fn-bracket">]</span></a></p>
|
||
<p>For example:</p>
|
||
<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[Simple Values]</span>
|
||
<span class="na">key</span><span class="o">=</span><span class="s">value</span>
|
||
<span class="na">spaces in keys</span><span class="o">=</span><span class="s">allowed</span>
|
||
<span class="na">spaces in values</span><span class="o">=</span><span class="s">allowed as well</span>
|
||
<span class="na">spaces around the delimiter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">obviously</span>
|
||
<span class="na">you can also use</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="s">to delimit keys from values</span>
|
||
|
||
<span class="k">[All Values Are Strings]</span>
|
||
<span class="na">values like this</span><span class="o">:</span><span class="w"> </span><span class="s">1000000</span>
|
||
<span class="na">or this</span><span class="o">:</span><span class="w"> </span><span class="s">3.14159265359</span>
|
||
<span class="na">are they treated as numbers?</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="s">no</span>
|
||
<span class="na">integers, floats and booleans are held as</span><span class="o">:</span><span class="w"> </span><span class="s">strings</span>
|
||
<span class="na">can use the API to get converted values directly</span><span class="o">:</span><span class="w"> </span><span class="s">true</span>
|
||
|
||
<span class="k">[Multiline Values]</span>
|
||
<span class="na">chorus</span><span class="o">:</span><span class="w"> </span><span class="s">I'm a lumberjack, and I'm okay</span>
|
||
<span class="w"> </span><span class="na">I sleep all night and I work all day</span>
|
||
|
||
<span class="k">[No Values]</span>
|
||
<span class="na">key_without_value</span>
|
||
<span class="na">empty string value here</span><span class="w"> </span><span class="o">=</span>
|
||
|
||
<span class="k">[You can use comments]</span>
|
||
<span class="c1"># like this</span>
|
||
<span class="c1">; or this</span>
|
||
|
||
<span class="c1"># By default only in an empty line.</span>
|
||
<span class="c1"># Inline comments can be harmful because they prevent users</span>
|
||
<span class="c1"># from using the delimiting characters as parts of values.</span>
|
||
<span class="c1"># That being said, this can be customized.</span>
|
||
|
||
<span class="w"> </span><span class="k">[Sections Can Be Indented]</span>
|
||
<span class="w"> </span><span class="na">can_values_be_as_well</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">True</span>
|
||
<span class="w"> </span><span class="na">does_that_mean_anything_special</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">False</span>
|
||
<span class="w"> </span><span class="na">purpose</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">formatting for readability</span>
|
||
<span class="w"> </span><span class="na">multiline_values</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">are</span>
|
||
<span class="w"> </span><span class="na">handled just fine as</span>
|
||
<span class="w"> </span><span class="na">long as they are indented</span>
|
||
<span class="w"> </span><span class="na">deeper than the first line</span>
|
||
<span class="w"> </span><span class="na">of a value</span>
|
||
<span class="w"> </span><span class="c1"># Did I mention we can indent comments, too?</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="unnamed-sections">
|
||
<span id="id10"></span><h2>Unnamed Sections<a class="headerlink" href="#unnamed-sections" title="Link to this heading">¶</a></h2>
|
||
<p>The name of the first section (or unique) may be omitted and values
|
||
retrieved by the <a class="reference internal" href="#configparser.UNNAMED_SECTION" title="configparser.UNNAMED_SECTION"><code class="xref py py-const docutils literal notranslate"><span class="pre">UNNAMED_SECTION</span></code></a> attribute.</p>
|
||
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">config</span> <span class="o">=</span> <span class="s2">"""</span>
|
||
<span class="gp">... </span><span class="s2">option = value</span>
|
||
<span class="gp">...</span>
|
||
<span class="gp">... </span><span class="s2">[ Section 2 ]</span>
|
||
<span class="gp">... </span><span class="s2">another = val</span>
|
||
<span class="gp">... </span><span class="s2">"""</span>
|
||
<span class="gp">>>> </span><span class="n">unnamed</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">(</span><span class="n">allow_unnamed_section</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||
<span class="gp">>>> </span><span class="n">unnamed</span><span class="o">.</span><span class="n">read_string</span><span class="p">(</span><span class="n">config</span><span class="p">)</span>
|
||
<span class="gp">>>> </span><span class="n">unnamed</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">configparser</span><span class="o">.</span><span class="n">UNNAMED_SECTION</span><span class="p">,</span> <span class="s1">'option'</span><span class="p">)</span>
|
||
<span class="go">'value'</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="interpolation-of-values">
|
||
<h2>Interpolation of values<a class="headerlink" href="#interpolation-of-values" title="Link to this heading">¶</a></h2>
|
||
<p>On top of the core functionality, <a class="reference internal" href="#configparser.ConfigParser" title="configparser.ConfigParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">ConfigParser</span></code></a> supports
|
||
interpolation. This means values can be preprocessed before returning them
|
||
from <code class="docutils literal notranslate"><span class="pre">get()</span></code> calls.</p>
|
||
<dl class="py class" id="index-1">
|
||
<dt class="sig sig-object py" id="configparser.BasicInterpolation">
|
||
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">configparser.</span></span><span class="sig-name descname"><span class="pre">BasicInterpolation</span></span><a class="headerlink" href="#configparser.BasicInterpolation" title="Link to this definition">¶</a></dt>
|
||
<dd><p>The default implementation used by <a class="reference internal" href="#configparser.ConfigParser" title="configparser.ConfigParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">ConfigParser</span></code></a>. It enables
|
||
values to contain format strings which refer to other values in the same
|
||
section, or values in the special default section <a class="footnote-reference brackets" href="#id16" id="id11" role="doc-noteref"><span class="fn-bracket">[</span>1<span class="fn-bracket">]</span></a>. Additional default
|
||
values can be provided on initialization.</p>
|
||
<p>For example:</p>
|
||
<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[Paths]</span>
|
||
<span class="na">home_dir</span><span class="o">:</span><span class="w"> </span><span class="s">/Users</span>
|
||
<span class="na">my_dir</span><span class="o">:</span><span class="w"> </span><span class="s">%(home_dir)s/lumberjack</span>
|
||
<span class="na">my_pictures</span><span class="o">:</span><span class="w"> </span><span class="s">%(my_dir)s/Pictures</span>
|
||
|
||
<span class="k">[Escape]</span>
|
||
<span class="c1"># use a %% to escape the % sign (% is the only character that needs to be escaped):</span>
|
||
<span class="na">gain</span><span class="o">:</span><span class="w"> </span><span class="s">80%%</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>In the example above, <a class="reference internal" href="#configparser.ConfigParser" title="configparser.ConfigParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">ConfigParser</span></code></a> with <em>interpolation</em> set to
|
||
<code class="docutils literal notranslate"><span class="pre">BasicInterpolation()</span></code> would resolve <code class="docutils literal notranslate"><span class="pre">%(home_dir)s</span></code> to the value of
|
||
<code class="docutils literal notranslate"><span class="pre">home_dir</span></code> (<code class="docutils literal notranslate"><span class="pre">/Users</span></code> in this case). <code class="docutils literal notranslate"><span class="pre">%(my_dir)s</span></code> in effect would
|
||
resolve to <code class="docutils literal notranslate"><span class="pre">/Users/lumberjack</span></code>. All interpolations are done on demand so
|
||
keys used in the chain of references do not have to be specified in any
|
||
specific order in the configuration file.</p>
|
||
<p>With <code class="docutils literal notranslate"><span class="pre">interpolation</span></code> set to <code class="docutils literal notranslate"><span class="pre">None</span></code>, the parser would simply return
|
||
<code class="docutils literal notranslate"><span class="pre">%(my_dir)s/Pictures</span></code> as the value of <code class="docutils literal notranslate"><span class="pre">my_pictures</span></code> and
|
||
<code class="docutils literal notranslate"><span class="pre">%(home_dir)s/lumberjack</span></code> as the value of <code class="docutils literal notranslate"><span class="pre">my_dir</span></code>.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py class" id="index-2">
|
||
<dt class="sig sig-object py" id="configparser.ExtendedInterpolation">
|
||
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">configparser.</span></span><span class="sig-name descname"><span class="pre">ExtendedInterpolation</span></span><a class="headerlink" href="#configparser.ExtendedInterpolation" title="Link to this definition">¶</a></dt>
|
||
<dd><p>An alternative handler for interpolation which implements a more advanced
|
||
syntax, used for instance in <code class="docutils literal notranslate"><span class="pre">zc.buildout</span></code>. Extended interpolation is
|
||
using <code class="docutils literal notranslate"><span class="pre">${section:option}</span></code> to denote a value from a foreign section.
|
||
Interpolation can span multiple levels. For convenience, if the
|
||
<code class="docutils literal notranslate"><span class="pre">section:</span></code> part is omitted, interpolation defaults to the current section
|
||
(and possibly the default values from the special section).</p>
|
||
<p>For example, the configuration specified above with basic interpolation,
|
||
would look like this with extended interpolation:</p>
|
||
<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[Paths]</span>
|
||
<span class="na">home_dir</span><span class="o">:</span><span class="w"> </span><span class="s">/Users</span>
|
||
<span class="na">my_dir</span><span class="o">:</span><span class="w"> </span><span class="s">${home_dir}/lumberjack</span>
|
||
<span class="na">my_pictures</span><span class="o">:</span><span class="w"> </span><span class="s">${my_dir}/Pictures</span>
|
||
|
||
<span class="k">[Escape]</span>
|
||
<span class="c1"># use a $$ to escape the $ sign ($ is the only character that needs to be escaped):</span>
|
||
<span class="na">cost</span><span class="o">:</span><span class="w"> </span><span class="s">$$80</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Values from other sections can be fetched as well:</p>
|
||
<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[Common]</span>
|
||
<span class="na">home_dir</span><span class="o">:</span><span class="w"> </span><span class="s">/Users</span>
|
||
<span class="na">library_dir</span><span class="o">:</span><span class="w"> </span><span class="s">/Library</span>
|
||
<span class="na">system_dir</span><span class="o">:</span><span class="w"> </span><span class="s">/System</span>
|
||
<span class="na">macports_dir</span><span class="o">:</span><span class="w"> </span><span class="s">/opt/local</span>
|
||
|
||
<span class="k">[Frameworks]</span>
|
||
<span class="na">Python</span><span class="o">:</span><span class="w"> </span><span class="s">3.2</span>
|
||
<span class="na">path</span><span class="o">:</span><span class="w"> </span><span class="s">${Common:system_dir}/Library/Frameworks/</span>
|
||
|
||
<span class="k">[Arthur]</span>
|
||
<span class="na">nickname</span><span class="o">:</span><span class="w"> </span><span class="s">Two Sheds</span>
|
||
<span class="na">last_name</span><span class="o">:</span><span class="w"> </span><span class="s">Jackson</span>
|
||
<span class="na">my_dir</span><span class="o">:</span><span class="w"> </span><span class="s">${Common:home_dir}/twosheds</span>
|
||
<span class="na">my_pictures</span><span class="o">:</span><span class="w"> </span><span class="s">${my_dir}/Pictures</span>
|
||
<span class="na">python_dir</span><span class="o">:</span><span class="w"> </span><span class="s">${Frameworks:path}/Python/Versions/${Frameworks:Python}</span>
|
||
</pre></div>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
</section>
|
||
<section id="mapping-protocol-access">
|
||
<h2>Mapping Protocol Access<a class="headerlink" href="#mapping-protocol-access" title="Link to this heading">¶</a></h2>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">Added in version 3.2.</span></p>
|
||
</div>
|
||
<p>Mapping protocol access is a generic name for functionality that enables using
|
||
custom objects as if they were dictionaries. In case of <a class="reference internal" href="#module-configparser" title="configparser: Configuration file parser."><code class="xref py py-mod docutils literal notranslate"><span class="pre">configparser</span></code></a>,
|
||
the mapping interface implementation is using the
|
||
<code class="docutils literal notranslate"><span class="pre">parser['section']['option']</span></code> notation.</p>
|
||
<p><code class="docutils literal notranslate"><span class="pre">parser['section']</span></code> in particular returns a proxy for the section’s data in
|
||
the parser. This means that the values are not copied but they are taken from
|
||
the original parser on demand. What’s even more important is that when values
|
||
are changed on a section proxy, they are actually mutated in the original
|
||
parser.</p>
|
||
<p><a class="reference internal" href="#module-configparser" title="configparser: Configuration file parser."><code class="xref py py-mod docutils literal notranslate"><span class="pre">configparser</span></code></a> objects behave as close to actual dictionaries as possible.
|
||
The mapping interface is complete and adheres to the
|
||
<a class="reference internal" href="collections.abc.html#collections.abc.MutableMapping" title="collections.abc.MutableMapping"><code class="xref py py-class docutils literal notranslate"><span class="pre">MutableMapping</span></code></a> ABC.
|
||
However, there are a few differences that should be taken into account:</p>
|
||
<ul>
|
||
<li><p>By default, all keys in sections are accessible in a case-insensitive manner
|
||
<a class="footnote-reference brackets" href="#id16" id="id12" role="doc-noteref"><span class="fn-bracket">[</span>1<span class="fn-bracket">]</span></a>. E.g. <code class="docutils literal notranslate"><span class="pre">for</span> <span class="pre">option</span> <span class="pre">in</span> <span class="pre">parser["section"]</span></code> yields only <code class="docutils literal notranslate"><span class="pre">optionxform</span></code>’ed
|
||
option key names. This means lowercased keys by default. At the same time,
|
||
for a section that holds the key <code class="docutils literal notranslate"><span class="pre">'a'</span></code>, both expressions return <code class="docutils literal notranslate"><span class="pre">True</span></code>:</p>
|
||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="s2">"a"</span> <span class="ow">in</span> <span class="n">parser</span><span class="p">[</span><span class="s2">"section"</span><span class="p">]</span>
|
||
<span class="s2">"A"</span> <span class="ow">in</span> <span class="n">parser</span><span class="p">[</span><span class="s2">"section"</span><span class="p">]</span>
|
||
</pre></div>
|
||
</div>
|
||
</li>
|
||
<li><p>All sections include <code class="docutils literal notranslate"><span class="pre">DEFAULTSECT</span></code> values as well which means that
|
||
<code class="docutils literal notranslate"><span class="pre">.clear()</span></code> on a section may not leave the section visibly empty. This is
|
||
because default values cannot be deleted from the section (because technically
|
||
they are not there). If they are overridden in the section, deleting causes
|
||
the default value to be visible again. Trying to delete a default value
|
||
causes a <a class="reference internal" href="exceptions.html#KeyError" title="KeyError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">KeyError</span></code></a>.</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">DEFAULTSECT</span></code> cannot be removed from the parser:</p>
|
||
<ul class="simple">
|
||
<li><p>trying to delete it raises <a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ValueError</span></code></a>,</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">parser.clear()</span></code> leaves it intact,</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">parser.popitem()</span></code> never returns it.</p></li>
|
||
</ul>
|
||
</li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">parser.get(section,</span> <span class="pre">option,</span> <span class="pre">**kwargs)</span></code> - the second argument is <strong>not</strong>
|
||
a fallback value. Note however that the section-level <code class="docutils literal notranslate"><span class="pre">get()</span></code> methods are
|
||
compatible both with the mapping protocol and the classic configparser API.</p></li>
|
||
<li><p><code class="docutils literal notranslate"><span class="pre">parser.items()</span></code> is compatible with the mapping protocol (returns a list of
|
||
<em>section_name</em>, <em>section_proxy</em> pairs including the DEFAULTSECT). However,
|
||
this method can also be invoked with arguments: <code class="docutils literal notranslate"><span class="pre">parser.items(section,</span> <span class="pre">raw,</span>
|
||
<span class="pre">vars)</span></code>. The latter call returns a list of <em>option</em>, <em>value</em> pairs for
|
||
a specified <code class="docutils literal notranslate"><span class="pre">section</span></code>, with all interpolations expanded (unless
|
||
<code class="docutils literal notranslate"><span class="pre">raw=True</span></code> is provided).</p></li>
|
||
</ul>
|
||
<p>The mapping protocol is implemented on top of the existing legacy API so that
|
||
subclasses overriding the original interface still should have mappings working
|
||
as expected.</p>
|
||
</section>
|
||
<section id="customizing-parser-behaviour">
|
||
<h2>Customizing Parser Behaviour<a class="headerlink" href="#customizing-parser-behaviour" title="Link to this heading">¶</a></h2>
|
||
<p>There are nearly as many INI format variants as there are applications using it.
|
||
<a class="reference internal" href="#module-configparser" title="configparser: Configuration file parser."><code class="xref py py-mod docutils literal notranslate"><span class="pre">configparser</span></code></a> goes a long way to provide support for the largest sensible
|
||
set of INI styles available. The default functionality is mainly dictated by
|
||
historical background and it’s very likely that you will want to customize some
|
||
of the features.</p>
|
||
<p>The most common way to change the way a specific config parser works is to use
|
||
the <code class="xref py py-meth docutils literal notranslate"><span class="pre">__init__()</span></code> options:</p>
|
||
<ul>
|
||
<li><p><em>defaults</em>, default value: <code class="docutils literal notranslate"><span class="pre">None</span></code></p>
|
||
<p>This option accepts a dictionary of key-value pairs which will be initially
|
||
put in the <code class="docutils literal notranslate"><span class="pre">DEFAULT</span></code> section. This makes for an elegant way to support
|
||
concise configuration files that don’t specify values which are the same as
|
||
the documented default.</p>
|
||
<p>Hint: if you want to specify default values for a specific section, use
|
||
<a class="reference internal" href="#configparser.ConfigParser.read_dict" title="configparser.ConfigParser.read_dict"><code class="xref py py-meth docutils literal notranslate"><span class="pre">read_dict()</span></code></a> before you read the actual file.</p>
|
||
</li>
|
||
<li><p><em>dict_type</em>, default value: <a class="reference internal" href="stdtypes.html#dict" title="dict"><code class="xref py py-class docutils literal notranslate"><span class="pre">dict</span></code></a></p>
|
||
<p>This option has a major impact on how the mapping protocol will behave and how
|
||
the written configuration files look. With the standard dictionary, every
|
||
section is stored in the order they were added to the parser. Same goes for
|
||
options within sections.</p>
|
||
<p>An alternative dictionary type can be used for example to sort sections and
|
||
options on write-back.</p>
|
||
<p>Please note: there are ways to add a set of key-value pairs in a single
|
||
operation. When you use a regular dictionary in those operations, the order
|
||
of the keys will be ordered. For example:</p>
|
||
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">parser</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">()</span>
|
||
<span class="gp">>>> </span><span class="n">parser</span><span class="o">.</span><span class="n">read_dict</span><span class="p">({</span><span class="s1">'section1'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'key1'</span><span class="p">:</span> <span class="s1">'value1'</span><span class="p">,</span>
|
||
<span class="gp">... </span> <span class="s1">'key2'</span><span class="p">:</span> <span class="s1">'value2'</span><span class="p">,</span>
|
||
<span class="gp">... </span> <span class="s1">'key3'</span><span class="p">:</span> <span class="s1">'value3'</span><span class="p">},</span>
|
||
<span class="gp">... </span> <span class="s1">'section2'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'keyA'</span><span class="p">:</span> <span class="s1">'valueA'</span><span class="p">,</span>
|
||
<span class="gp">... </span> <span class="s1">'keyB'</span><span class="p">:</span> <span class="s1">'valueB'</span><span class="p">,</span>
|
||
<span class="gp">... </span> <span class="s1">'keyC'</span><span class="p">:</span> <span class="s1">'valueC'</span><span class="p">},</span>
|
||
<span class="gp">... </span> <span class="s1">'section3'</span><span class="p">:</span> <span class="p">{</span><span class="s1">'foo'</span><span class="p">:</span> <span class="s1">'x'</span><span class="p">,</span>
|
||
<span class="gp">... </span> <span class="s1">'bar'</span><span class="p">:</span> <span class="s1">'y'</span><span class="p">,</span>
|
||
<span class="gp">... </span> <span class="s1">'baz'</span><span class="p">:</span> <span class="s1">'z'</span><span class="p">}</span>
|
||
<span class="gp">... </span><span class="p">})</span>
|
||
<span class="gp">>>> </span><span class="n">parser</span><span class="o">.</span><span class="n">sections</span><span class="p">()</span>
|
||
<span class="go">['section1', 'section2', 'section3']</span>
|
||
<span class="gp">>>> </span><span class="p">[</span><span class="n">option</span> <span class="k">for</span> <span class="n">option</span> <span class="ow">in</span> <span class="n">parser</span><span class="p">[</span><span class="s1">'section3'</span><span class="p">]]</span>
|
||
<span class="go">['foo', 'bar', 'baz']</span>
|
||
</pre></div>
|
||
</div>
|
||
</li>
|
||
<li><p><em>allow_no_value</em>, default value: <code class="docutils literal notranslate"><span class="pre">False</span></code></p>
|
||
<p>Some configuration files are known to include settings without values, but
|
||
which otherwise conform to the syntax supported by <a class="reference internal" href="#module-configparser" title="configparser: Configuration file parser."><code class="xref py py-mod docutils literal notranslate"><span class="pre">configparser</span></code></a>. The
|
||
<em>allow_no_value</em> parameter to the constructor can be used to
|
||
indicate that such values should be accepted:</p>
|
||
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">import</span><span class="w"> </span><span class="nn">configparser</span>
|
||
|
||
<span class="gp">>>> </span><span class="n">sample_config</span> <span class="o">=</span> <span class="s2">"""</span>
|
||
<span class="gp">... </span><span class="s2">[mysqld]</span>
|
||
<span class="gp">... </span><span class="s2"> user = mysql</span>
|
||
<span class="gp">... </span><span class="s2"> pid-file = /var/run/mysqld/mysqld.pid</span>
|
||
<span class="gp">... </span><span class="s2"> skip-external-locking</span>
|
||
<span class="gp">... </span><span class="s2"> old_passwords = 1</span>
|
||
<span class="gp">... </span><span class="s2"> skip-bdb</span>
|
||
<span class="gp">... </span><span class="s2"> # we don't need ACID today</span>
|
||
<span class="gp">... </span><span class="s2"> skip-innodb</span>
|
||
<span class="gp">... </span><span class="s2">"""</span>
|
||
<span class="gp">>>> </span><span class="n">config</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">(</span><span class="n">allow_no_value</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||
<span class="gp">>>> </span><span class="n">config</span><span class="o">.</span><span class="n">read_string</span><span class="p">(</span><span class="n">sample_config</span><span class="p">)</span>
|
||
|
||
<span class="gp">>>> </span><span class="c1"># Settings with values are treated as before:</span>
|
||
<span class="gp">>>> </span><span class="n">config</span><span class="p">[</span><span class="s2">"mysqld"</span><span class="p">][</span><span class="s2">"user"</span><span class="p">]</span>
|
||
<span class="go">'mysql'</span>
|
||
|
||
<span class="gp">>>> </span><span class="c1"># Settings without values provide None:</span>
|
||
<span class="gp">>>> </span><span class="n">config</span><span class="p">[</span><span class="s2">"mysqld"</span><span class="p">][</span><span class="s2">"skip-bdb"</span><span class="p">]</span>
|
||
|
||
<span class="gp">>>> </span><span class="c1"># Settings which aren't specified still raise an error:</span>
|
||
<span class="gp">>>> </span><span class="n">config</span><span class="p">[</span><span class="s2">"mysqld"</span><span class="p">][</span><span class="s2">"does-not-exist"</span><span class="p">]</span>
|
||
<span class="gt">Traceback (most recent call last):</span>
|
||
<span class="w"> </span><span class="c">...</span>
|
||
<span class="gr">KeyError</span>: <span class="n">'does-not-exist'</span>
|
||
</pre></div>
|
||
</div>
|
||
</li>
|
||
<li><p><em>delimiters</em>, default value: <code class="docutils literal notranslate"><span class="pre">('=',</span> <span class="pre">':')</span></code></p>
|
||
<p>Delimiters are substrings that delimit keys from values within a section.
|
||
The first occurrence of a delimiting substring on a line is considered
|
||
a delimiter. This means values (but not keys) can contain the delimiters.</p>
|
||
<p>See also the <em>space_around_delimiters</em> argument to
|
||
<a class="reference internal" href="#configparser.ConfigParser.write" title="configparser.ConfigParser.write"><code class="xref py py-meth docutils literal notranslate"><span class="pre">ConfigParser.write()</span></code></a>.</p>
|
||
</li>
|
||
<li><p><em>comment_prefixes</em>, default value: <code class="docutils literal notranslate"><span class="pre">('#',</span> <span class="pre">';')</span></code></p></li>
|
||
<li><p><em>inline_comment_prefixes</em>, default value: <code class="docutils literal notranslate"><span class="pre">None</span></code></p>
|
||
<p>Comment prefixes are strings that indicate the start of a valid comment within
|
||
a config file. <em>comment_prefixes</em> are used only on otherwise empty lines
|
||
(optionally indented) whereas <em>inline_comment_prefixes</em> can be used after
|
||
every valid value (e.g. section names, options and empty lines as well). By
|
||
default inline comments are disabled and <code class="docutils literal notranslate"><span class="pre">'#'</span></code> and <code class="docutils literal notranslate"><span class="pre">';'</span></code> are used as
|
||
prefixes for whole line comments.</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.2: </span>In previous versions of <a class="reference internal" href="#module-configparser" title="configparser: Configuration file parser."><code class="xref py py-mod docutils literal notranslate"><span class="pre">configparser</span></code></a> behaviour matched
|
||
<code class="docutils literal notranslate"><span class="pre">comment_prefixes=('#',';')</span></code> and <code class="docutils literal notranslate"><span class="pre">inline_comment_prefixes=(';',)</span></code>.</p>
|
||
</div>
|
||
<p>Please note that config parsers don’t support escaping of comment prefixes so
|
||
using <em>inline_comment_prefixes</em> may prevent users from specifying option
|
||
values with characters used as comment prefixes. When in doubt, avoid
|
||
setting <em>inline_comment_prefixes</em>. In any circumstances, the only way of
|
||
storing comment prefix characters at the beginning of a line in multiline
|
||
values is to interpolate the prefix, for example:</p>
|
||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span><span class="w"> </span><span class="nn">configparser</span><span class="w"> </span><span class="kn">import</span> <span class="n">ConfigParser</span><span class="p">,</span> <span class="n">ExtendedInterpolation</span>
|
||
<span class="gp">>>> </span><span class="n">parser</span> <span class="o">=</span> <span class="n">ConfigParser</span><span class="p">(</span><span class="n">interpolation</span><span class="o">=</span><span class="n">ExtendedInterpolation</span><span class="p">())</span>
|
||
<span class="gp">>>> </span><span class="c1"># the default BasicInterpolation could be used as well</span>
|
||
<span class="gp">>>> </span><span class="n">parser</span><span class="o">.</span><span class="n">read_string</span><span class="p">(</span><span class="s2">"""</span>
|
||
<span class="gp">... </span><span class="s2">[DEFAULT]</span>
|
||
<span class="gp">... </span><span class="s2">hash = #</span>
|
||
<span class="gp">...</span>
|
||
<span class="gp">... </span><span class="s2">[hashes]</span>
|
||
<span class="gp">... </span><span class="s2">shebang =</span>
|
||
<span class="gp">... </span><span class="s2"> $</span><span class="si">{hash}</span><span class="s2">!/usr/bin/env python</span>
|
||
<span class="gp">... </span><span class="s2"> $</span><span class="si">{hash}</span><span class="s2"> -*- coding: utf-8 -*-</span>
|
||
<span class="gp">...</span>
|
||
<span class="gp">... </span><span class="s2">extensions =</span>
|
||
<span class="gp">... </span><span class="s2"> enabled_extension</span>
|
||
<span class="gp">... </span><span class="s2"> another_extension</span>
|
||
<span class="gp">... </span><span class="s2"> #disabled_by_comment</span>
|
||
<span class="gp">... </span><span class="s2"> yet_another_extension</span>
|
||
<span class="gp">...</span>
|
||
<span class="gp">... </span><span class="s2">interpolation not necessary = if # is not at line start</span>
|
||
<span class="gp">... </span><span class="s2">even in multiline values = line #1</span>
|
||
<span class="gp">... </span><span class="s2"> line #2</span>
|
||
<span class="gp">... </span><span class="s2"> line #3</span>
|
||
<span class="gp">... </span><span class="s2">"""</span><span class="p">)</span>
|
||
<span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">parser</span><span class="p">[</span><span class="s1">'hashes'</span><span class="p">][</span><span class="s1">'shebang'</span><span class="p">])</span>
|
||
|
||
<span class="go">#!/usr/bin/env python</span>
|
||
<span class="go"># -*- coding: utf-8 -*-</span>
|
||
<span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">parser</span><span class="p">[</span><span class="s1">'hashes'</span><span class="p">][</span><span class="s1">'extensions'</span><span class="p">])</span>
|
||
|
||
<span class="go">enabled_extension</span>
|
||
<span class="go">another_extension</span>
|
||
<span class="go">yet_another_extension</span>
|
||
<span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">parser</span><span class="p">[</span><span class="s1">'hashes'</span><span class="p">][</span><span class="s1">'interpolation not necessary'</span><span class="p">])</span>
|
||
<span class="go">if # is not at line start</span>
|
||
<span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">parser</span><span class="p">[</span><span class="s1">'hashes'</span><span class="p">][</span><span class="s1">'even in multiline values'</span><span class="p">])</span>
|
||
<span class="go">line #1</span>
|
||
<span class="go">line #2</span>
|
||
<span class="go">line #3</span>
|
||
</pre></div>
|
||
</div>
|
||
</li>
|
||
<li><p><em>strict</em>, default value: <code class="docutils literal notranslate"><span class="pre">True</span></code></p>
|
||
<p>When set to <code class="docutils literal notranslate"><span class="pre">True</span></code>, the parser will not allow for any section or option
|
||
duplicates while reading from a single source (using <a class="reference internal" href="#configparser.ConfigParser.read_file" title="configparser.ConfigParser.read_file"><code class="xref py py-meth docutils literal notranslate"><span class="pre">read_file()</span></code></a>,
|
||
<a class="reference internal" href="#configparser.ConfigParser.read_string" title="configparser.ConfigParser.read_string"><code class="xref py py-meth docutils literal notranslate"><span class="pre">read_string()</span></code></a> or <a class="reference internal" href="#configparser.ConfigParser.read_dict" title="configparser.ConfigParser.read_dict"><code class="xref py py-meth docutils literal notranslate"><span class="pre">read_dict()</span></code></a>). It is recommended to use strict
|
||
parsers in new applications.</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.2: </span>In previous versions of <a class="reference internal" href="#module-configparser" title="configparser: Configuration file parser."><code class="xref py py-mod docutils literal notranslate"><span class="pre">configparser</span></code></a> behaviour matched
|
||
<code class="docutils literal notranslate"><span class="pre">strict=False</span></code>.</p>
|
||
</div>
|
||
</li>
|
||
<li><p><em>empty_lines_in_values</em>, default value: <code class="docutils literal notranslate"><span class="pre">True</span></code></p>
|
||
<p>In config parsers, values can span multiple lines as long as they are
|
||
indented more than the key that holds them. By default parsers also let
|
||
empty lines to be parts of values. At the same time, keys can be arbitrarily
|
||
indented themselves to improve readability. In consequence, when
|
||
configuration files get big and complex, it is easy for the user to lose
|
||
track of the file structure. Take for instance:</p>
|
||
<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[Section]</span>
|
||
<span class="na">key</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">multiline</span>
|
||
<span class="w"> </span><span class="na">value with a gotcha</span>
|
||
|
||
<span class="w"> </span><span class="na">this</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">is still a part of the multiline value of 'key'</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>This can be especially problematic for the user to see if she’s using a
|
||
proportional font to edit the file. That is why when your application does
|
||
not need values with empty lines, you should consider disallowing them. This
|
||
will make empty lines split keys every time. In the example above, it would
|
||
produce two keys, <code class="docutils literal notranslate"><span class="pre">key</span></code> and <code class="docutils literal notranslate"><span class="pre">this</span></code>.</p>
|
||
</li>
|
||
<li><p><em>default_section</em>, default value: <code class="docutils literal notranslate"><span class="pre">configparser.DEFAULTSECT</span></code> (that is:
|
||
<code class="docutils literal notranslate"><span class="pre">"DEFAULT"</span></code>)</p>
|
||
<p>The convention of allowing a special section of default values for other
|
||
sections or interpolation purposes is a powerful concept of this library,
|
||
letting users create complex declarative configurations. This section is
|
||
normally called <code class="docutils literal notranslate"><span class="pre">"DEFAULT"</span></code> but this can be customized to point to any
|
||
other valid section name. Some typical values include: <code class="docutils literal notranslate"><span class="pre">"general"</span></code> or
|
||
<code class="docutils literal notranslate"><span class="pre">"common"</span></code>. The name provided is used for recognizing default sections
|
||
when reading from any source and is used when writing configuration back to
|
||
a file. Its current value can be retrieved using the
|
||
<code class="docutils literal notranslate"><span class="pre">parser_instance.default_section</span></code> attribute and may be modified at runtime
|
||
(i.e. to convert files from one format to another).</p>
|
||
</li>
|
||
<li><p><em>interpolation</em>, default value: <code class="docutils literal notranslate"><span class="pre">configparser.BasicInterpolation</span></code></p>
|
||
<p>Interpolation behaviour may be customized by providing a custom handler
|
||
through the <em>interpolation</em> argument. <code class="docutils literal notranslate"><span class="pre">None</span></code> can be used to turn off
|
||
interpolation completely, <code class="docutils literal notranslate"><span class="pre">ExtendedInterpolation()</span></code> provides a more
|
||
advanced variant inspired by <code class="docutils literal notranslate"><span class="pre">zc.buildout</span></code>. More on the subject in the
|
||
<a class="reference external" href="#interpolation-of-values">dedicated documentation section</a>.
|
||
<a class="reference internal" href="#configparser.RawConfigParser" title="configparser.RawConfigParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">RawConfigParser</span></code></a> has a default value of <code class="docutils literal notranslate"><span class="pre">None</span></code>.</p>
|
||
</li>
|
||
<li><p><em>converters</em>, default value: not set</p>
|
||
<p>Config parsers provide option value getters that perform type conversion. By
|
||
default <a class="reference internal" href="#configparser.ConfigParser.getint" title="configparser.ConfigParser.getint"><code class="xref py py-meth docutils literal notranslate"><span class="pre">getint()</span></code></a>, <a class="reference internal" href="#configparser.ConfigParser.getfloat" title="configparser.ConfigParser.getfloat"><code class="xref py py-meth docutils literal notranslate"><span class="pre">getfloat()</span></code></a>, and
|
||
<a class="reference internal" href="#configparser.ConfigParser.getboolean" title="configparser.ConfigParser.getboolean"><code class="xref py py-meth docutils literal notranslate"><span class="pre">getboolean()</span></code></a> are implemented. Should other getters be
|
||
desirable, users may define them in a subclass or pass a dictionary where each
|
||
key is a name of the converter and each value is a callable implementing said
|
||
conversion. For instance, passing <code class="docutils literal notranslate"><span class="pre">{'decimal':</span> <span class="pre">decimal.Decimal}</span></code> would add
|
||
<code class="xref py py-meth docutils literal notranslate"><span class="pre">getdecimal()</span></code> on both the parser object and all section proxies. In
|
||
other words, it will be possible to write both
|
||
<code class="docutils literal notranslate"><span class="pre">parser_instance.getdecimal('section',</span> <span class="pre">'key',</span> <span class="pre">fallback=0)</span></code> and
|
||
<code class="docutils literal notranslate"><span class="pre">parser_instance['section'].getdecimal('key',</span> <span class="pre">0)</span></code>.</p>
|
||
<p>If the converter needs to access the state of the parser, it can be
|
||
implemented as a method on a config parser subclass. If the name of this
|
||
method starts with <code class="docutils literal notranslate"><span class="pre">get</span></code>, it will be available on all section proxies, in
|
||
the dict-compatible form (see the <code class="docutils literal notranslate"><span class="pre">getdecimal()</span></code> example above).</p>
|
||
</li>
|
||
</ul>
|
||
<p>More advanced customization may be achieved by overriding default values of
|
||
these parser attributes. The defaults are defined on the classes, so they may
|
||
be overridden by subclasses or by attribute assignment.</p>
|
||
<dl class="py attribute">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.BOOLEAN_STATES">
|
||
<span class="sig-prename descclassname"><span class="pre">ConfigParser.</span></span><span class="sig-name descname"><span class="pre">BOOLEAN_STATES</span></span><a class="headerlink" href="#configparser.ConfigParser.BOOLEAN_STATES" title="Link to this definition">¶</a></dt>
|
||
<dd><p>By default when using <a class="reference internal" href="#configparser.ConfigParser.getboolean" title="configparser.ConfigParser.getboolean"><code class="xref py py-meth docutils literal notranslate"><span class="pre">getboolean()</span></code></a>, config parsers
|
||
consider the following values <code class="docutils literal notranslate"><span class="pre">True</span></code>: <code class="docutils literal notranslate"><span class="pre">'1'</span></code>, <code class="docutils literal notranslate"><span class="pre">'yes'</span></code>, <code class="docutils literal notranslate"><span class="pre">'true'</span></code>,
|
||
<code class="docutils literal notranslate"><span class="pre">'on'</span></code> and the following values <code class="docutils literal notranslate"><span class="pre">False</span></code>: <code class="docutils literal notranslate"><span class="pre">'0'</span></code>, <code class="docutils literal notranslate"><span class="pre">'no'</span></code>, <code class="docutils literal notranslate"><span class="pre">'false'</span></code>,
|
||
<code class="docutils literal notranslate"><span class="pre">'off'</span></code>. You can override this by specifying a custom dictionary of strings
|
||
and their Boolean outcomes. For example:</p>
|
||
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">custom</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">()</span>
|
||
<span class="gp">>>> </span><span class="n">custom</span><span class="p">[</span><span class="s1">'section1'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'funky'</span><span class="p">:</span> <span class="s1">'nope'</span><span class="p">}</span>
|
||
<span class="gp">>>> </span><span class="n">custom</span><span class="p">[</span><span class="s1">'section1'</span><span class="p">]</span><span class="o">.</span><span class="n">getboolean</span><span class="p">(</span><span class="s1">'funky'</span><span class="p">)</span>
|
||
<span class="gt">Traceback (most recent call last):</span>
|
||
<span class="c">...</span>
|
||
<span class="gr">ValueError</span>: <span class="n">Not a boolean: nope</span>
|
||
<span class="gp">>>> </span><span class="n">custom</span><span class="o">.</span><span class="n">BOOLEAN_STATES</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'sure'</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span> <span class="s1">'nope'</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
|
||
<span class="gp">>>> </span><span class="n">custom</span><span class="p">[</span><span class="s1">'section1'</span><span class="p">]</span><span class="o">.</span><span class="n">getboolean</span><span class="p">(</span><span class="s1">'funky'</span><span class="p">)</span>
|
||
<span class="go">False</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Other typical Boolean pairs include <code class="docutils literal notranslate"><span class="pre">accept</span></code>/<code class="docutils literal notranslate"><span class="pre">reject</span></code> or
|
||
<code class="docutils literal notranslate"><span class="pre">enabled</span></code>/<code class="docutils literal notranslate"><span class="pre">disabled</span></code>.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py">
|
||
<span class="sig-prename descclassname"><span class="pre">ConfigParser.</span></span><span class="sig-name descname"><span class="pre">optionxform</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">option</span></span></em><span class="sig-paren">)</span></dt>
|
||
<dd><p>This method transforms option names on every read, get, or set
|
||
operation. The default converts the name to lowercase. This also
|
||
means that when a configuration file gets written, all keys will be
|
||
lowercase. Override this method if that’s unsuitable.
|
||
For example:</p>
|
||
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">config</span> <span class="o">=</span> <span class="s2">"""</span>
|
||
<span class="gp">... </span><span class="s2">[Section1]</span>
|
||
<span class="gp">... </span><span class="s2">Key = Value</span>
|
||
<span class="gp">...</span>
|
||
<span class="gp">... </span><span class="s2">[Section2]</span>
|
||
<span class="gp">... </span><span class="s2">AnotherKey = Value</span>
|
||
<span class="gp">... </span><span class="s2">"""</span>
|
||
<span class="gp">>>> </span><span class="n">typical</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">()</span>
|
||
<span class="gp">>>> </span><span class="n">typical</span><span class="o">.</span><span class="n">read_string</span><span class="p">(</span><span class="n">config</span><span class="p">)</span>
|
||
<span class="gp">>>> </span><span class="nb">list</span><span class="p">(</span><span class="n">typical</span><span class="p">[</span><span class="s1">'Section1'</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
|
||
<span class="go">['key']</span>
|
||
<span class="gp">>>> </span><span class="nb">list</span><span class="p">(</span><span class="n">typical</span><span class="p">[</span><span class="s1">'Section2'</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
|
||
<span class="go">['anotherkey']</span>
|
||
<span class="gp">>>> </span><span class="n">custom</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">RawConfigParser</span><span class="p">()</span>
|
||
<span class="gp">>>> </span><span class="n">custom</span><span class="o">.</span><span class="n">optionxform</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">option</span><span class="p">:</span> <span class="n">option</span>
|
||
<span class="gp">>>> </span><span class="n">custom</span><span class="o">.</span><span class="n">read_string</span><span class="p">(</span><span class="n">config</span><span class="p">)</span>
|
||
<span class="gp">>>> </span><span class="nb">list</span><span class="p">(</span><span class="n">custom</span><span class="p">[</span><span class="s1">'Section1'</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
|
||
<span class="go">['Key']</span>
|
||
<span class="gp">>>> </span><span class="nb">list</span><span class="p">(</span><span class="n">custom</span><span class="p">[</span><span class="s1">'Section2'</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
|
||
<span class="go">['AnotherKey']</span>
|
||
</pre></div>
|
||
</div>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">Note</p>
|
||
<p>The optionxform function transforms option names to a canonical form.
|
||
This should be an idempotent function: if the name is already in
|
||
canonical form, it should be returned unchanged.</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="py attribute">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.SECTCRE">
|
||
<span class="sig-prename descclassname"><span class="pre">ConfigParser.</span></span><span class="sig-name descname"><span class="pre">SECTCRE</span></span><a class="headerlink" href="#configparser.ConfigParser.SECTCRE" title="Link to this definition">¶</a></dt>
|
||
<dd><p>A compiled regular expression used to parse section headers. The default
|
||
matches <code class="docutils literal notranslate"><span class="pre">[section]</span></code> to the name <code class="docutils literal notranslate"><span class="pre">"section"</span></code>. Whitespace is considered
|
||
part of the section name, thus <code class="docutils literal notranslate"><span class="pre">[</span>  <span class="pre">larch</span>  <span class="pre">]</span></code> will be read as a section of
|
||
name <code class="docutils literal notranslate"><span class="pre">"</span>  <span class="pre">larch</span>  <span class="pre">"</span></code>. Override this attribute if that’s unsuitable. For
|
||
example:</p>
|
||
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">import</span><span class="w"> </span><span class="nn">re</span>
|
||
<span class="gp">>>> </span><span class="n">config</span> <span class="o">=</span> <span class="s2">"""</span>
|
||
<span class="gp">... </span><span class="s2">[Section 1]</span>
|
||
<span class="gp">... </span><span class="s2">option = value</span>
|
||
<span class="gp">...</span>
|
||
<span class="gp">... </span><span class="s2">[ Section 2 ]</span>
|
||
<span class="gp">... </span><span class="s2">another = val</span>
|
||
<span class="gp">... </span><span class="s2">"""</span>
|
||
<span class="gp">>>> </span><span class="n">typical</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">()</span>
|
||
<span class="gp">>>> </span><span class="n">typical</span><span class="o">.</span><span class="n">read_string</span><span class="p">(</span><span class="n">config</span><span class="p">)</span>
|
||
<span class="gp">>>> </span><span class="n">typical</span><span class="o">.</span><span class="n">sections</span><span class="p">()</span>
|
||
<span class="go">['Section 1', ' Section 2 ']</span>
|
||
<span class="gp">>>> </span><span class="n">custom</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">()</span>
|
||
<span class="gp">>>> </span><span class="n">custom</span><span class="o">.</span><span class="n">SECTCRE</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"\[ *(?P<header>[^]]+?) *\]"</span><span class="p">)</span>
|
||
<span class="gp">>>> </span><span class="n">custom</span><span class="o">.</span><span class="n">read_string</span><span class="p">(</span><span class="n">config</span><span class="p">)</span>
|
||
<span class="gp">>>> </span><span class="n">custom</span><span class="o">.</span><span class="n">sections</span><span class="p">()</span>
|
||
<span class="go">['Section 1', 'Section 2']</span>
|
||
</pre></div>
|
||
</div>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">Note</p>
|
||
<p>While ConfigParser objects also use an <code class="docutils literal notranslate"><span class="pre">OPTCRE</span></code> attribute for recognizing
|
||
option lines, it’s not recommended to override it because that would
|
||
interfere with constructor options <em>allow_no_value</em> and <em>delimiters</em>.</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
</section>
|
||
<section id="legacy-api-examples">
|
||
<h2>Legacy API Examples<a class="headerlink" href="#legacy-api-examples" title="Link to this heading">¶</a></h2>
|
||
<p>Mainly because of backwards compatibility concerns, <a class="reference internal" href="#module-configparser" title="configparser: Configuration file parser."><code class="xref py py-mod docutils literal notranslate"><span class="pre">configparser</span></code></a>
|
||
provides also a legacy API with explicit <code class="docutils literal notranslate"><span class="pre">get</span></code>/<code class="docutils literal notranslate"><span class="pre">set</span></code> methods. While there
|
||
are valid use cases for the methods outlined below, mapping protocol access is
|
||
preferred for new projects. The legacy API is at times more advanced,
|
||
low-level and downright counterintuitive.</p>
|
||
<p>An example of writing to a configuration file:</p>
|
||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">configparser</span>
|
||
|
||
<span class="n">config</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">RawConfigParser</span><span class="p">()</span>
|
||
|
||
<span class="c1"># Please note that using RawConfigParser's set functions, you can assign</span>
|
||
<span class="c1"># non-string values to keys internally, but will receive an error when</span>
|
||
<span class="c1"># attempting to write to a file or when you get it in non-raw mode. Setting</span>
|
||
<span class="c1"># values using the mapping protocol or ConfigParser's set() does not allow</span>
|
||
<span class="c1"># such assignments to take place.</span>
|
||
<span class="n">config</span><span class="o">.</span><span class="n">add_section</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">)</span>
|
||
<span class="n">config</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">,</span> <span class="s1">'an_int'</span><span class="p">,</span> <span class="s1">'15'</span><span class="p">)</span>
|
||
<span class="n">config</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">,</span> <span class="s1">'a_bool'</span><span class="p">,</span> <span class="s1">'true'</span><span class="p">)</span>
|
||
<span class="n">config</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">,</span> <span class="s1">'a_float'</span><span class="p">,</span> <span class="s1">'3.1415'</span><span class="p">)</span>
|
||
<span class="n">config</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">,</span> <span class="s1">'baz'</span><span class="p">,</span> <span class="s1">'fun'</span><span class="p">)</span>
|
||
<span class="n">config</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">,</span> <span class="s1">'bar'</span><span class="p">,</span> <span class="s1">'Python'</span><span class="p">)</span>
|
||
<span class="n">config</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">,</span> <span class="s1">'foo'</span><span class="p">,</span> <span class="s1">'</span><span class="si">%(bar)s</span><span class="s1"> is </span><span class="si">%(baz)s</span><span class="s1">!'</span><span class="p">)</span>
|
||
|
||
<span class="c1"># Writing our configuration file to 'example.cfg'</span>
|
||
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'example.cfg'</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">configfile</span><span class="p">:</span>
|
||
<span class="n">config</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">configfile</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>An example of reading the configuration file again:</p>
|
||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">configparser</span>
|
||
|
||
<span class="n">config</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">RawConfigParser</span><span class="p">()</span>
|
||
<span class="n">config</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="s1">'example.cfg'</span><span class="p">)</span>
|
||
|
||
<span class="c1"># getfloat() raises an exception if the value is not a float</span>
|
||
<span class="c1"># getint() and getboolean() also do this for their respective types</span>
|
||
<span class="n">a_float</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">getfloat</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">,</span> <span class="s1">'a_float'</span><span class="p">)</span>
|
||
<span class="n">an_int</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">getint</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">,</span> <span class="s1">'an_int'</span><span class="p">)</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="n">a_float</span> <span class="o">+</span> <span class="n">an_int</span><span class="p">)</span>
|
||
|
||
<span class="c1"># Notice that the next output does not interpolate '%(bar)s' or '%(baz)s'.</span>
|
||
<span class="c1"># This is because we are using a RawConfigParser().</span>
|
||
<span class="k">if</span> <span class="n">config</span><span class="o">.</span><span class="n">getboolean</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">,</span> <span class="s1">'a_bool'</span><span class="p">):</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">,</span> <span class="s1">'foo'</span><span class="p">))</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>To get interpolation, use <a class="reference internal" href="#configparser.ConfigParser" title="configparser.ConfigParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">ConfigParser</span></code></a>:</p>
|
||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">configparser</span>
|
||
|
||
<span class="n">cfg</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">()</span>
|
||
<span class="n">cfg</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="s1">'example.cfg'</span><span class="p">)</span>
|
||
|
||
<span class="c1"># Set the optional *raw* argument of get() to True if you wish to disable</span>
|
||
<span class="c1"># interpolation in a single get operation.</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="n">cfg</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">,</span> <span class="s1">'foo'</span><span class="p">,</span> <span class="n">raw</span><span class="o">=</span><span class="kc">False</span><span class="p">))</span> <span class="c1"># -> "Python is fun!"</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="n">cfg</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">,</span> <span class="s1">'foo'</span><span class="p">,</span> <span class="n">raw</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span> <span class="c1"># -> "%(bar)s is %(baz)s!"</span>
|
||
|
||
<span class="c1"># The optional *vars* argument is a dict with members that will take</span>
|
||
<span class="c1"># precedence in interpolation.</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="n">cfg</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">,</span> <span class="s1">'foo'</span><span class="p">,</span> <span class="nb">vars</span><span class="o">=</span><span class="p">{</span><span class="s1">'bar'</span><span class="p">:</span> <span class="s1">'Documentation'</span><span class="p">,</span>
|
||
<span class="s1">'baz'</span><span class="p">:</span> <span class="s1">'evil'</span><span class="p">}))</span>
|
||
|
||
<span class="c1"># The optional *fallback* argument can be used to provide a fallback value</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="n">cfg</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">,</span> <span class="s1">'foo'</span><span class="p">))</span>
|
||
<span class="c1"># -> "Python is fun!"</span>
|
||
|
||
<span class="nb">print</span><span class="p">(</span><span class="n">cfg</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">,</span> <span class="s1">'foo'</span><span class="p">,</span> <span class="n">fallback</span><span class="o">=</span><span class="s1">'Monty is not.'</span><span class="p">))</span>
|
||
<span class="c1"># -> "Python is fun!"</span>
|
||
|
||
<span class="nb">print</span><span class="p">(</span><span class="n">cfg</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">,</span> <span class="s1">'monster'</span><span class="p">,</span> <span class="n">fallback</span><span class="o">=</span><span class="s1">'No such things as monsters.'</span><span class="p">))</span>
|
||
<span class="c1"># -> "No such things as monsters."</span>
|
||
|
||
<span class="c1"># A bare print(cfg.get('Section1', 'monster')) would raise NoOptionError</span>
|
||
<span class="c1"># but we can also use:</span>
|
||
|
||
<span class="nb">print</span><span class="p">(</span><span class="n">cfg</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">,</span> <span class="s1">'monster'</span><span class="p">,</span> <span class="n">fallback</span><span class="o">=</span><span class="kc">None</span><span class="p">))</span>
|
||
<span class="c1"># -> None</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Default values are available in both types of ConfigParsers. They are used in
|
||
interpolation if an option used is not defined elsewhere.</p>
|
||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">configparser</span>
|
||
|
||
<span class="c1"># New instance with 'bar' and 'baz' defaulting to 'Life' and 'hard' each</span>
|
||
<span class="n">config</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">({</span><span class="s1">'bar'</span><span class="p">:</span> <span class="s1">'Life'</span><span class="p">,</span> <span class="s1">'baz'</span><span class="p">:</span> <span class="s1">'hard'</span><span class="p">})</span>
|
||
<span class="n">config</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="s1">'example.cfg'</span><span class="p">)</span>
|
||
|
||
<span class="nb">print</span><span class="p">(</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">,</span> <span class="s1">'foo'</span><span class="p">))</span> <span class="c1"># -> "Python is fun!"</span>
|
||
<span class="n">config</span><span class="o">.</span><span class="n">remove_option</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">,</span> <span class="s1">'bar'</span><span class="p">)</span>
|
||
<span class="n">config</span><span class="o">.</span><span class="n">remove_option</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">,</span> <span class="s1">'baz'</span><span class="p">)</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="n">config</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'Section1'</span><span class="p">,</span> <span class="s1">'foo'</span><span class="p">))</span> <span class="c1"># -> "Life is hard!"</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="configparser-objects">
|
||
<span id="id13"></span><h2>ConfigParser Objects<a class="headerlink" href="#configparser-objects" title="Link to this heading">¶</a></h2>
|
||
<dl class="py class">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser">
|
||
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">configparser.</span></span><span class="sig-name descname"><span class="pre">ConfigParser</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">defaults</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dict_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">allow_no_value</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="keyword-only-separator o"><abbr title="Keyword-only parameters separator (PEP 3102)"><span class="pre">*</span></abbr></span></em>, <em class="sig-param"><span class="n"><span class="pre">delimiters</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">('=',</span> <span class="pre">':')</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">comment_prefixes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">('#',</span> <span class="pre">';')</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">inline_comment_prefixes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">strict</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">empty_lines_in_values</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">default_section</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">configparser.DEFAULTSECT</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">interpolation</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">BasicInterpolation()</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">converters</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">{}</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">allow_unnamed_section</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser" title="Link to this definition">¶</a></dt>
|
||
<dd><p>The main configuration parser. When <em>defaults</em> is given, it is initialized
|
||
into the dictionary of intrinsic defaults. When <em>dict_type</em> is given, it
|
||
will be used to create the dictionary objects for the list of sections, for
|
||
the options within a section, and for the default values.</p>
|
||
<p>When <em>delimiters</em> is given, it is used as the set of substrings that
|
||
divide keys from values. When <em>comment_prefixes</em> is given, it will be used
|
||
as the set of substrings that prefix comments in otherwise empty lines.
|
||
Comments can be indented. When <em>inline_comment_prefixes</em> is given, it will
|
||
be used as the set of substrings that prefix comments in non-empty lines.</p>
|
||
<p>When <em>strict</em> is <code class="docutils literal notranslate"><span class="pre">True</span></code> (the default), the parser won’t allow for
|
||
any section or option duplicates while reading from a single source (file,
|
||
string or dictionary), raising <a class="reference internal" href="#configparser.DuplicateSectionError" title="configparser.DuplicateSectionError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">DuplicateSectionError</span></code></a> or
|
||
<a class="reference internal" href="#configparser.DuplicateOptionError" title="configparser.DuplicateOptionError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">DuplicateOptionError</span></code></a>. When <em>empty_lines_in_values</em> is <code class="docutils literal notranslate"><span class="pre">False</span></code>
|
||
(default: <code class="docutils literal notranslate"><span class="pre">True</span></code>), each empty line marks the end of an option. Otherwise,
|
||
internal empty lines of a multiline option are kept as part of the value.
|
||
When <em>allow_no_value</em> is <code class="docutils literal notranslate"><span class="pre">True</span></code> (default: <code class="docutils literal notranslate"><span class="pre">False</span></code>), options without
|
||
values are accepted; the value held for these is <code class="docutils literal notranslate"><span class="pre">None</span></code> and they are
|
||
serialized without the trailing delimiter.</p>
|
||
<p>When <em>default_section</em> is given, it specifies the name for the special
|
||
section holding default values for other sections and interpolation purposes
|
||
(normally named <code class="docutils literal notranslate"><span class="pre">"DEFAULT"</span></code>). This value can be retrieved and changed at
|
||
runtime using the <code class="docutils literal notranslate"><span class="pre">default_section</span></code> instance attribute. This won’t
|
||
re-evaluate an already parsed config file, but will be used when writing
|
||
parsed settings to a new config file.</p>
|
||
<p>Interpolation behaviour may be customized by providing a custom handler
|
||
through the <em>interpolation</em> argument. <code class="docutils literal notranslate"><span class="pre">None</span></code> can be used to turn off
|
||
interpolation completely, <code class="docutils literal notranslate"><span class="pre">ExtendedInterpolation()</span></code> provides a more
|
||
advanced variant inspired by <code class="docutils literal notranslate"><span class="pre">zc.buildout</span></code>. More on the subject in the
|
||
<a class="reference external" href="#interpolation-of-values">dedicated documentation section</a>.</p>
|
||
<p>All option names used in interpolation will be passed through the
|
||
<a class="reference internal" href="#configparser.ConfigParser.optionxform" title="configparser.ConfigParser.optionxform"><code class="xref py py-meth docutils literal notranslate"><span class="pre">optionxform()</span></code></a> method just like any other option name reference. For
|
||
example, using the default implementation of <a class="reference internal" href="#configparser.ConfigParser.optionxform" title="configparser.ConfigParser.optionxform"><code class="xref py py-meth docutils literal notranslate"><span class="pre">optionxform()</span></code></a> (which
|
||
converts option names to lower case), the values <code class="docutils literal notranslate"><span class="pre">foo</span> <span class="pre">%(bar)s</span></code> and <code class="docutils literal notranslate"><span class="pre">foo</span>
|
||
<span class="pre">%(BAR)s</span></code> are equivalent.</p>
|
||
<p>When <em>converters</em> is given, it should be a dictionary where each key
|
||
represents the name of a type converter and each value is a callable
|
||
implementing the conversion from string to the desired datatype. Every
|
||
converter gets its own corresponding <code class="xref py py-meth docutils literal notranslate"><span class="pre">get*()</span></code> method on the parser
|
||
object and section proxies.</p>
|
||
<p>When <em>allow_unnamed_section</em> is <code class="docutils literal notranslate"><span class="pre">True</span></code> (default: <code class="docutils literal notranslate"><span class="pre">False</span></code>),
|
||
the first section name can be omitted. See the
|
||
<a class="reference external" href="#unnamed-sections">“Unnamed Sections” section</a>.</p>
|
||
<p>It is possible to read several configurations into a single
|
||
<a class="reference internal" href="#configparser.ConfigParser" title="configparser.ConfigParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">ConfigParser</span></code></a>, where the most recently added configuration has the
|
||
highest priority. Any conflicting keys are taken from the more recent
|
||
configuration while the previously existing keys are retained. The example
|
||
below reads in an <code class="docutils literal notranslate"><span class="pre">override.ini</span></code> file, which will override any conflicting
|
||
keys from the <code class="docutils literal notranslate"><span class="pre">example.ini</span></code> file.</p>
|
||
<div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[DEFAULT]</span>
|
||
<span class="na">ServerAliveInterval</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">-1</span>
|
||
</pre></div>
|
||
</div>
|
||
<div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">config_override</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">()</span>
|
||
<span class="gp">>>> </span><span class="n">config_override</span><span class="p">[</span><span class="s1">'DEFAULT'</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'ServerAliveInterval'</span><span class="p">:</span> <span class="s1">'-1'</span><span class="p">}</span>
|
||
<span class="gp">>>> </span><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">'override.ini'</span><span class="p">,</span> <span class="s1">'w'</span><span class="p">)</span> <span class="k">as</span> <span class="n">configfile</span><span class="p">:</span>
|
||
<span class="gp">... </span> <span class="n">config_override</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">configfile</span><span class="p">)</span>
|
||
<span class="gp">...</span>
|
||
<span class="gp">>>> </span><span class="n">config_override</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">()</span>
|
||
<span class="gp">>>> </span><span class="n">config_override</span><span class="o">.</span><span class="n">read</span><span class="p">([</span><span class="s1">'example.ini'</span><span class="p">,</span> <span class="s1">'override.ini'</span><span class="p">])</span>
|
||
<span class="go">['example.ini', 'override.ini']</span>
|
||
<span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">config_override</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'DEFAULT'</span><span class="p">,</span> <span class="s1">'ServerAliveInterval'</span><span class="p">))</span>
|
||
<span class="go">-1</span>
|
||
</pre></div>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.1: </span>The default <em>dict_type</em> is <a class="reference internal" href="collections.html#collections.OrderedDict" title="collections.OrderedDict"><code class="xref py py-class docutils literal notranslate"><span class="pre">collections.OrderedDict</span></code></a>.</p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.2: </span><em>allow_no_value</em>, <em>delimiters</em>, <em>comment_prefixes</em>, <em>strict</em>,
|
||
<em>empty_lines_in_values</em>, <em>default_section</em> and <em>interpolation</em> were
|
||
added.</p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.5: </span>The <em>converters</em> argument was added.</p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.7: </span>The <em>defaults</em> argument is read with <a class="reference internal" href="#configparser.ConfigParser.read_dict" title="configparser.ConfigParser.read_dict"><code class="xref py py-meth docutils literal notranslate"><span class="pre">read_dict()</span></code></a>,
|
||
providing consistent behavior across the parser: non-string
|
||
keys and values are implicitly converted to strings.</p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.8: </span>The default <em>dict_type</em> is <a class="reference internal" href="stdtypes.html#dict" title="dict"><code class="xref py py-class docutils literal notranslate"><span class="pre">dict</span></code></a>, since it now preserves
|
||
insertion order.</p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.13: </span>Raise a <a class="reference internal" href="#configparser.MultilineContinuationError" title="configparser.MultilineContinuationError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">MultilineContinuationError</span></code></a> when <em>allow_no_value</em> is
|
||
<code class="docutils literal notranslate"><span class="pre">True</span></code>, and a key without a value is continued with an indented line.</p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.13: </span>The <em>allow_unnamed_section</em> argument was added.</p>
|
||
</div>
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.defaults">
|
||
<span class="sig-name descname"><span class="pre">defaults</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.defaults" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Return a dictionary containing the instance-wide defaults.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.sections">
|
||
<span class="sig-name descname"><span class="pre">sections</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.sections" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Return a list of the sections available; the <em>default section</em> is not
|
||
included in the list.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.add_section">
|
||
<span class="sig-name descname"><span class="pre">add_section</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">section</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.add_section" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Add a section named <em>section</em> to the instance. If a section by the given
|
||
name already exists, <a class="reference internal" href="#configparser.DuplicateSectionError" title="configparser.DuplicateSectionError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">DuplicateSectionError</span></code></a> is raised. If the
|
||
<em>default section</em> name is passed, <a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ValueError</span></code></a> is raised. The name
|
||
of the section must be a string; if not, <a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a> is raised.</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.2: </span>Non-string section names raise <a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a>.</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.has_section">
|
||
<span class="sig-name descname"><span class="pre">has_section</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">section</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.has_section" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Indicates whether the named <em>section</em> is present in the configuration.
|
||
The <em>default section</em> is not acknowledged.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.options">
|
||
<span class="sig-name descname"><span class="pre">options</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">section</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.options" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Return a list of options available in the specified <em>section</em>.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.has_option">
|
||
<span class="sig-name descname"><span class="pre">has_option</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">section</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">option</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.has_option" title="Link to this definition">¶</a></dt>
|
||
<dd><p>If the given <em>section</em> exists, and contains the given <em>option</em>, return
|
||
<a class="reference internal" href="constants.html#True" title="True"><code class="xref py py-const docutils literal notranslate"><span class="pre">True</span></code></a>; otherwise return <a class="reference internal" href="constants.html#False" title="False"><code class="xref py py-const docutils literal notranslate"><span class="pre">False</span></code></a>. If the specified
|
||
<em>section</em> is <a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal notranslate"><span class="pre">None</span></code></a> or an empty string, DEFAULT is assumed.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.read">
|
||
<span class="sig-name descname"><span class="pre">read</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filenames</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">encoding</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.read" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Attempt to read and parse an iterable of filenames, returning a list of
|
||
filenames which were successfully parsed.</p>
|
||
<p>If <em>filenames</em> is a string, a <a class="reference internal" href="stdtypes.html#bytes" title="bytes"><code class="xref py py-class docutils literal notranslate"><span class="pre">bytes</span></code></a> object or a
|
||
<a class="reference internal" href="../glossary.html#term-path-like-object"><span class="xref std std-term">path-like object</span></a>, it is treated as
|
||
a single filename. If a file named in <em>filenames</em> cannot be opened, that
|
||
file will be ignored. This is designed so that you can specify an
|
||
iterable of potential configuration file locations (for example, the
|
||
current directory, the user’s home directory, and some system-wide
|
||
directory), and all existing configuration files in the iterable will be
|
||
read.</p>
|
||
<p>If none of the named files exist, the <a class="reference internal" href="#configparser.ConfigParser" title="configparser.ConfigParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">ConfigParser</span></code></a>
|
||
instance will contain an empty dataset. An application which requires
|
||
initial values to be loaded from a file should load the required file or
|
||
files using <a class="reference internal" href="#configparser.ConfigParser.read_file" title="configparser.ConfigParser.read_file"><code class="xref py py-meth docutils literal notranslate"><span class="pre">read_file()</span></code></a> before calling <a class="reference internal" href="#configparser.ConfigParser.read" title="configparser.ConfigParser.read"><code class="xref py py-meth docutils literal notranslate"><span class="pre">read()</span></code></a> for any
|
||
optional files:</p>
|
||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">configparser</span><span class="o">,</span><span class="w"> </span><span class="nn">os</span>
|
||
|
||
<span class="n">config</span> <span class="o">=</span> <span class="n">configparser</span><span class="o">.</span><span class="n">ConfigParser</span><span class="p">()</span>
|
||
<span class="n">config</span><span class="o">.</span><span class="n">read_file</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="s1">'defaults.cfg'</span><span class="p">))</span>
|
||
<span class="n">config</span><span class="o">.</span><span class="n">read</span><span class="p">([</span><span class="s1">'site.cfg'</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="s1">'~/.myapp.cfg'</span><span class="p">)],</span>
|
||
<span class="n">encoding</span><span class="o">=</span><span class="s1">'cp1250'</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.2: </span>Added the <em>encoding</em> parameter.
|
||
Previously, all files were read using the default encoding for <a class="reference internal" href="functions.html#open" title="open"><code class="xref py py-func docutils literal notranslate"><span class="pre">open()</span></code></a>.</p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.6.1: </span>The <em>filenames</em> parameter accepts a <a class="reference internal" href="../glossary.html#term-path-like-object"><span class="xref std std-term">path-like object</span></a>.</p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.7: </span>The <em>filenames</em> parameter accepts a <a class="reference internal" href="stdtypes.html#bytes" title="bytes"><code class="xref py py-class docutils literal notranslate"><span class="pre">bytes</span></code></a> object.</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.read_file">
|
||
<span class="sig-name descname"><span class="pre">read_file</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">f</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">source</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.read_file" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Read and parse configuration data from <em>f</em> which must be an iterable
|
||
yielding Unicode strings (for example files opened in text mode).</p>
|
||
<p>Optional argument <em>source</em> specifies the name of the file being read. If
|
||
not given and <em>f</em> has a <code class="xref py py-attr docutils literal notranslate"><span class="pre">name</span></code> attribute, that is used for
|
||
<em>source</em>; the default is <code class="docutils literal notranslate"><span class="pre">'<???>'</span></code>.</p>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">Added in version 3.2: </span>Replaces <code class="xref py py-meth docutils literal notranslate"><span class="pre">readfp()</span></code>.</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.read_string">
|
||
<span class="sig-name descname"><span class="pre">read_string</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">string</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">source</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'<string>'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.read_string" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Parse configuration data from a string.</p>
|
||
<p>Optional argument <em>source</em> specifies a context-specific name of the
|
||
string passed. If not given, <code class="docutils literal notranslate"><span class="pre">'<string>'</span></code> is used. This should
|
||
commonly be a filesystem path or a URL.</p>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">Added in version 3.2.</span></p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.read_dict">
|
||
<span class="sig-name descname"><span class="pre">read_dict</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">dictionary</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">source</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'<dict>'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.read_dict" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Load configuration from any object that provides a dict-like <code class="docutils literal notranslate"><span class="pre">items()</span></code>
|
||
method. Keys are section names, values are dictionaries with keys and
|
||
values that should be present in the section. If the used dictionary
|
||
type preserves order, sections and their keys will be added in order.
|
||
Values are automatically converted to strings.</p>
|
||
<p>Optional argument <em>source</em> specifies a context-specific name of the
|
||
dictionary passed. If not given, <code class="docutils literal notranslate"><span class="pre"><dict></span></code> is used.</p>
|
||
<p>This method can be used to copy state between parsers.</p>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">Added in version 3.2.</span></p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.get">
|
||
<span class="sig-name descname"><span class="pre">get</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">section</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">option</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">raw=False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">vars=None</span></span></em><span class="optional">[</span>, <em class="sig-param"><span class="n"><span class="pre">fallback</span></span></em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.get" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Get an <em>option</em> value for the named <em>section</em>. If <em>vars</em> is provided, it
|
||
must be a dictionary. The <em>option</em> is looked up in <em>vars</em> (if provided),
|
||
<em>section</em>, and in <em>DEFAULTSECT</em> in that order. If the key is not found
|
||
and <em>fallback</em> is provided, it is used as a fallback value. <code class="docutils literal notranslate"><span class="pre">None</span></code> can
|
||
be provided as a <em>fallback</em> value.</p>
|
||
<p>All the <code class="docutils literal notranslate"><span class="pre">'%'</span></code> interpolations are expanded in the return values, unless
|
||
the <em>raw</em> argument is true. Values for interpolation keys are looked up
|
||
in the same manner as the option.</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.2: </span>Arguments <em>raw</em>, <em>vars</em> and <em>fallback</em> are keyword only to protect
|
||
users from trying to use the third argument as the <em>fallback</em> fallback
|
||
(especially when using the mapping protocol).</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.getint">
|
||
<span class="sig-name descname"><span class="pre">getint</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">section</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">option</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">raw=False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">vars=None</span></span></em><span class="optional">[</span>, <em class="sig-param"><span class="n"><span class="pre">fallback</span></span></em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.getint" title="Link to this definition">¶</a></dt>
|
||
<dd><p>A convenience method which coerces the <em>option</em> in the specified <em>section</em>
|
||
to an integer. See <a class="reference internal" href="#configparser.ConfigParser.get" title="configparser.ConfigParser.get"><code class="xref py py-meth docutils literal notranslate"><span class="pre">get()</span></code></a> for explanation of <em>raw</em>, <em>vars</em> and
|
||
<em>fallback</em>.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.getfloat">
|
||
<span class="sig-name descname"><span class="pre">getfloat</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">section</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">option</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">raw=False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">vars=None</span></span></em><span class="optional">[</span>, <em class="sig-param"><span class="n"><span class="pre">fallback</span></span></em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.getfloat" title="Link to this definition">¶</a></dt>
|
||
<dd><p>A convenience method which coerces the <em>option</em> in the specified <em>section</em>
|
||
to a floating-point number. See <a class="reference internal" href="#configparser.ConfigParser.get" title="configparser.ConfigParser.get"><code class="xref py py-meth docutils literal notranslate"><span class="pre">get()</span></code></a> for explanation of <em>raw</em>,
|
||
<em>vars</em> and <em>fallback</em>.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.getboolean">
|
||
<span class="sig-name descname"><span class="pre">getboolean</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">section</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">option</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">raw=False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">vars=None</span></span></em><span class="optional">[</span>, <em class="sig-param"><span class="n"><span class="pre">fallback</span></span></em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.getboolean" title="Link to this definition">¶</a></dt>
|
||
<dd><p>A convenience method which coerces the <em>option</em> in the specified <em>section</em>
|
||
to a Boolean value. Note that the accepted values for the option are
|
||
<code class="docutils literal notranslate"><span class="pre">'1'</span></code>, <code class="docutils literal notranslate"><span class="pre">'yes'</span></code>, <code class="docutils literal notranslate"><span class="pre">'true'</span></code>, and <code class="docutils literal notranslate"><span class="pre">'on'</span></code>, which cause this method to
|
||
return <code class="docutils literal notranslate"><span class="pre">True</span></code>, and <code class="docutils literal notranslate"><span class="pre">'0'</span></code>, <code class="docutils literal notranslate"><span class="pre">'no'</span></code>, <code class="docutils literal notranslate"><span class="pre">'false'</span></code>, and <code class="docutils literal notranslate"><span class="pre">'off'</span></code>, which
|
||
cause it to return <code class="docutils literal notranslate"><span class="pre">False</span></code>. These string values are checked in a
|
||
case-insensitive manner. Any other value will cause it to raise
|
||
<a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ValueError</span></code></a>. See <a class="reference internal" href="#configparser.ConfigParser.get" title="configparser.ConfigParser.get"><code class="xref py py-meth docutils literal notranslate"><span class="pre">get()</span></code></a> for explanation of <em>raw</em>, <em>vars</em> and
|
||
<em>fallback</em>.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.items">
|
||
<span class="sig-name descname"><span class="pre">items</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">raw</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">vars</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.items" title="Link to this definition">¶</a></dt>
|
||
<dt class="sig sig-object py">
|
||
<span class="sig-name descname"><span class="pre">items</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">section</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">raw</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">vars</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span></dt>
|
||
<dd><p>When <em>section</em> is not given, return a list of <em>section_name</em>,
|
||
<em>section_proxy</em> pairs, including DEFAULTSECT.</p>
|
||
<p>Otherwise, return a list of <em>name</em>, <em>value</em> pairs for the options in the
|
||
given <em>section</em>. Optional arguments have the same meaning as for the
|
||
<a class="reference internal" href="#configparser.ConfigParser.get" title="configparser.ConfigParser.get"><code class="xref py py-meth docutils literal notranslate"><span class="pre">get()</span></code></a> method.</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.8: </span>Items present in <em>vars</em> no longer appear in the result. The previous
|
||
behaviour mixed actual parser options with variables provided for
|
||
interpolation.</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.set">
|
||
<span class="sig-name descname"><span class="pre">set</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">section</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">option</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.set" title="Link to this definition">¶</a></dt>
|
||
<dd><p>If the given section exists, set the given option to the specified value;
|
||
otherwise raise <a class="reference internal" href="#configparser.NoSectionError" title="configparser.NoSectionError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">NoSectionError</span></code></a>. <em>option</em> and <em>value</em> must be
|
||
strings; if not, <a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a> is raised.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.write">
|
||
<span class="sig-name descname"><span class="pre">write</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">fileobject</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">space_around_delimiters</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.write" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Write a representation of the configuration to the specified <a class="reference internal" href="../glossary.html#term-file-object"><span class="xref std std-term">file
|
||
object</span></a>, which must be opened in text mode (accepting strings). This
|
||
representation can be parsed by a future <a class="reference internal" href="#configparser.ConfigParser.read" title="configparser.ConfigParser.read"><code class="xref py py-meth docutils literal notranslate"><span class="pre">read()</span></code></a> call. If
|
||
<em>space_around_delimiters</em> is true, delimiters between
|
||
keys and values are surrounded by spaces.</p>
|
||
</dd></dl>
|
||
|
||
<div class="admonition note">
|
||
<p class="admonition-title">Note</p>
|
||
<p>Comments in the original configuration file are not preserved when
|
||
writing the configuration back.
|
||
What is considered a comment, depends on the given values for
|
||
<em>comment_prefix</em> and <em>inline_comment_prefix</em>.</p>
|
||
</div>
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.remove_option">
|
||
<span class="sig-name descname"><span class="pre">remove_option</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">section</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">option</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.remove_option" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Remove the specified <em>option</em> from the specified <em>section</em>. If the
|
||
section does not exist, raise <a class="reference internal" href="#configparser.NoSectionError" title="configparser.NoSectionError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">NoSectionError</span></code></a>. If the option
|
||
existed to be removed, return <a class="reference internal" href="constants.html#True" title="True"><code class="xref py py-const docutils literal notranslate"><span class="pre">True</span></code></a>; otherwise return
|
||
<a class="reference internal" href="constants.html#False" title="False"><code class="xref py py-const docutils literal notranslate"><span class="pre">False</span></code></a>.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.remove_section">
|
||
<span class="sig-name descname"><span class="pre">remove_section</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">section</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.remove_section" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Remove the specified <em>section</em> from the configuration. If the section in
|
||
fact existed, return <code class="docutils literal notranslate"><span class="pre">True</span></code>. Otherwise return <code class="docutils literal notranslate"><span class="pre">False</span></code>.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.ConfigParser.optionxform">
|
||
<span class="sig-name descname"><span class="pre">optionxform</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">option</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.optionxform" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Transforms the option name <em>option</em> as found in an input file or as passed
|
||
in by client code to the form that should be used in the internal
|
||
structures. The default implementation returns a lower-case version of
|
||
<em>option</em>; subclasses may override this or client code can set an attribute
|
||
of this name on instances to affect this behavior.</p>
|
||
<p>You don’t need to subclass the parser to use this method, you can also
|
||
set it on an instance, to a function that takes a string argument and
|
||
returns a string. Setting it to <code class="docutils literal notranslate"><span class="pre">str</span></code>, for example, would make option
|
||
names case sensitive:</p>
|
||
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="n">cfgparser</span> <span class="o">=</span> <span class="n">ConfigParser</span><span class="p">()</span>
|
||
<span class="n">cfgparser</span><span class="o">.</span><span class="n">optionxform</span> <span class="o">=</span> <span class="nb">str</span>
|
||
</pre></div>
|
||
</div>
|
||
<p>Note that when reading configuration files, whitespace around the option
|
||
names is stripped before <a class="reference internal" href="#configparser.ConfigParser.optionxform" title="configparser.ConfigParser.optionxform"><code class="xref py py-meth docutils literal notranslate"><span class="pre">optionxform()</span></code></a> is called.</p>
|
||
</dd></dl>
|
||
|
||
</dd></dl>
|
||
|
||
<dl class="py data">
|
||
<dt class="sig sig-object py" id="configparser.UNNAMED_SECTION">
|
||
<span class="sig-prename descclassname"><span class="pre">configparser.</span></span><span class="sig-name descname"><span class="pre">UNNAMED_SECTION</span></span><a class="headerlink" href="#configparser.UNNAMED_SECTION" title="Link to this definition">¶</a></dt>
|
||
<dd><p>A special object representing a section name used to reference the unnamed section (see <a class="reference internal" href="#unnamed-sections"><span class="std std-ref">Unnamed Sections</span></a>).</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py data">
|
||
<dt class="sig sig-object py" id="configparser.MAX_INTERPOLATION_DEPTH">
|
||
<span class="sig-prename descclassname"><span class="pre">configparser.</span></span><span class="sig-name descname"><span class="pre">MAX_INTERPOLATION_DEPTH</span></span><a class="headerlink" href="#configparser.MAX_INTERPOLATION_DEPTH" title="Link to this definition">¶</a></dt>
|
||
<dd><p>The maximum depth for recursive interpolation for <a class="reference internal" href="#configparser.ConfigParser.get" title="configparser.ConfigParser.get"><code class="xref py py-meth docutils literal notranslate"><span class="pre">get()</span></code></a> when the <em>raw</em>
|
||
parameter is false. This is relevant only when the default <em>interpolation</em>
|
||
is used.</p>
|
||
</dd></dl>
|
||
|
||
</section>
|
||
<section id="rawconfigparser-objects">
|
||
<span id="id15"></span><h2>RawConfigParser Objects<a class="headerlink" href="#rawconfigparser-objects" title="Link to this heading">¶</a></h2>
|
||
<dl class="py class">
|
||
<dt class="sig sig-object py" id="configparser.RawConfigParser">
|
||
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">configparser.</span></span><span class="sig-name descname"><span class="pre">RawConfigParser</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">defaults</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dict_type</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">allow_no_value</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="keyword-only-separator o"><abbr title="Keyword-only parameters separator (PEP 3102)"><span class="pre">*</span></abbr></span></em>, <em class="sig-param"><span class="n"><span class="pre">delimiters</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">('=',</span> <span class="pre">':')</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">comment_prefixes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">('#',</span> <span class="pre">';')</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">inline_comment_prefixes</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">strict</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">empty_lines_in_values</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">default_section</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">configparser.DEFAULTSECT</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">interpolation</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">BasicInterpolation()</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">converters</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">{}</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">allow_unnamed_section</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.RawConfigParser" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Legacy variant of the <a class="reference internal" href="#configparser.ConfigParser" title="configparser.ConfigParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">ConfigParser</span></code></a>. It has interpolation
|
||
disabled by default and allows for non-string section names, option
|
||
names, and values via its unsafe <code class="docutils literal notranslate"><span class="pre">add_section</span></code> and <code class="docutils literal notranslate"><span class="pre">set</span></code> methods,
|
||
as well as the legacy <code class="docutils literal notranslate"><span class="pre">defaults=</span></code> keyword argument handling.</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.2: </span><em>allow_no_value</em>, <em>delimiters</em>, <em>comment_prefixes</em>, <em>strict</em>,
|
||
<em>empty_lines_in_values</em>, <em>default_section</em> and <em>interpolation</em> were
|
||
added.</p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.5: </span>The <em>converters</em> argument was added.</p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.8: </span>The default <em>dict_type</em> is <a class="reference internal" href="stdtypes.html#dict" title="dict"><code class="xref py py-class docutils literal notranslate"><span class="pre">dict</span></code></a>, since it now preserves
|
||
insertion order.</p>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.13: </span>The <em>allow_unnamed_section</em> argument was added.</p>
|
||
</div>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">Note</p>
|
||
<p>Consider using <a class="reference internal" href="#configparser.ConfigParser" title="configparser.ConfigParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">ConfigParser</span></code></a> instead which checks types of
|
||
the values to be stored internally. If you don’t want interpolation, you
|
||
can use <code class="docutils literal notranslate"><span class="pre">ConfigParser(interpolation=None)</span></code>.</p>
|
||
</div>
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.RawConfigParser.add_section">
|
||
<span class="sig-name descname"><span class="pre">add_section</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">section</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.RawConfigParser.add_section" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Add a section named <em>section</em> to the instance. If a section by the given
|
||
name already exists, <a class="reference internal" href="#configparser.DuplicateSectionError" title="configparser.DuplicateSectionError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">DuplicateSectionError</span></code></a> is raised. If the
|
||
<em>default section</em> name is passed, <a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">ValueError</span></code></a> is raised.</p>
|
||
<p>Type of <em>section</em> is not checked which lets users create non-string named
|
||
sections. This behaviour is unsupported and may cause internal errors.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py method">
|
||
<dt class="sig sig-object py" id="configparser.RawConfigParser.set">
|
||
<span class="sig-name descname"><span class="pre">set</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">section</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">option</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.RawConfigParser.set" title="Link to this definition">¶</a></dt>
|
||
<dd><p>If the given section exists, set the given option to the specified value;
|
||
otherwise raise <a class="reference internal" href="#configparser.NoSectionError" title="configparser.NoSectionError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">NoSectionError</span></code></a>. While it is possible to use
|
||
<a class="reference internal" href="#configparser.RawConfigParser" title="configparser.RawConfigParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">RawConfigParser</span></code></a> (or <a class="reference internal" href="#configparser.ConfigParser" title="configparser.ConfigParser"><code class="xref py py-class docutils literal notranslate"><span class="pre">ConfigParser</span></code></a> with <em>raw</em> parameters
|
||
set to true) for <em>internal</em> storage of non-string values, full
|
||
functionality (including interpolation and output to files) can only be
|
||
achieved using string values.</p>
|
||
<p>This method lets users assign non-string values to keys internally. This
|
||
behaviour is unsupported and will cause errors when attempting to write
|
||
to a file or get it in non-raw mode. <strong>Use the mapping protocol API</strong>
|
||
which does not allow such assignments to take place.</p>
|
||
</dd></dl>
|
||
|
||
</dd></dl>
|
||
|
||
</section>
|
||
<section id="exceptions">
|
||
<h2>Exceptions<a class="headerlink" href="#exceptions" title="Link to this heading">¶</a></h2>
|
||
<dl class="py exception">
|
||
<dt class="sig sig-object py" id="configparser.Error">
|
||
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">configparser.</span></span><span class="sig-name descname"><span class="pre">Error</span></span><a class="headerlink" href="#configparser.Error" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Base class for all other <a class="reference internal" href="#module-configparser" title="configparser: Configuration file parser."><code class="xref py py-mod docutils literal notranslate"><span class="pre">configparser</span></code></a> exceptions.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py exception">
|
||
<dt class="sig sig-object py" id="configparser.NoSectionError">
|
||
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">configparser.</span></span><span class="sig-name descname"><span class="pre">NoSectionError</span></span><a class="headerlink" href="#configparser.NoSectionError" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Exception raised when a specified section is not found.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py exception">
|
||
<dt class="sig sig-object py" id="configparser.DuplicateSectionError">
|
||
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">configparser.</span></span><span class="sig-name descname"><span class="pre">DuplicateSectionError</span></span><a class="headerlink" href="#configparser.DuplicateSectionError" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Exception raised if <a class="reference internal" href="#configparser.ConfigParser.add_section" title="configparser.ConfigParser.add_section"><code class="xref py py-meth docutils literal notranslate"><span class="pre">add_section()</span></code></a> is called with the name of a section
|
||
that is already present or in strict parsers when a section if found more
|
||
than once in a single input file, string or dictionary.</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.2: </span>Added the optional <em>source</em> and <em>lineno</em> attributes and parameters to
|
||
<code class="xref py py-meth docutils literal notranslate"><span class="pre">__init__()</span></code>.</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="py exception">
|
||
<dt class="sig sig-object py" id="configparser.DuplicateOptionError">
|
||
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">configparser.</span></span><span class="sig-name descname"><span class="pre">DuplicateOptionError</span></span><a class="headerlink" href="#configparser.DuplicateOptionError" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Exception raised by strict parsers if a single option appears twice during
|
||
reading from a single file, string or dictionary. This catches misspellings
|
||
and case sensitivity-related errors, e.g. a dictionary may have two keys
|
||
representing the same case-insensitive configuration key.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py exception">
|
||
<dt class="sig sig-object py" id="configparser.NoOptionError">
|
||
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">configparser.</span></span><span class="sig-name descname"><span class="pre">NoOptionError</span></span><a class="headerlink" href="#configparser.NoOptionError" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Exception raised when a specified option is not found in the specified
|
||
section.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py exception">
|
||
<dt class="sig sig-object py" id="configparser.InterpolationError">
|
||
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">configparser.</span></span><span class="sig-name descname"><span class="pre">InterpolationError</span></span><a class="headerlink" href="#configparser.InterpolationError" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Base class for exceptions raised when problems occur performing string
|
||
interpolation.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py exception">
|
||
<dt class="sig sig-object py" id="configparser.InterpolationDepthError">
|
||
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">configparser.</span></span><span class="sig-name descname"><span class="pre">InterpolationDepthError</span></span><a class="headerlink" href="#configparser.InterpolationDepthError" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Exception raised when string interpolation cannot be completed because the
|
||
number of iterations exceeds <a class="reference internal" href="#configparser.MAX_INTERPOLATION_DEPTH" title="configparser.MAX_INTERPOLATION_DEPTH"><code class="xref py py-const docutils literal notranslate"><span class="pre">MAX_INTERPOLATION_DEPTH</span></code></a>. Subclass of
|
||
<a class="reference internal" href="#configparser.InterpolationError" title="configparser.InterpolationError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">InterpolationError</span></code></a>.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py exception">
|
||
<dt class="sig sig-object py" id="configparser.InterpolationMissingOptionError">
|
||
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">configparser.</span></span><span class="sig-name descname"><span class="pre">InterpolationMissingOptionError</span></span><a class="headerlink" href="#configparser.InterpolationMissingOptionError" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Exception raised when an option referenced from a value does not exist.
|
||
Subclass of <a class="reference internal" href="#configparser.InterpolationError" title="configparser.InterpolationError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">InterpolationError</span></code></a>.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py exception">
|
||
<dt class="sig sig-object py" id="configparser.InterpolationSyntaxError">
|
||
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">configparser.</span></span><span class="sig-name descname"><span class="pre">InterpolationSyntaxError</span></span><a class="headerlink" href="#configparser.InterpolationSyntaxError" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Exception raised when the source text into which substitutions are made does
|
||
not conform to the required syntax. Subclass of <a class="reference internal" href="#configparser.InterpolationError" title="configparser.InterpolationError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">InterpolationError</span></code></a>.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py exception">
|
||
<dt class="sig sig-object py" id="configparser.MissingSectionHeaderError">
|
||
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">configparser.</span></span><span class="sig-name descname"><span class="pre">MissingSectionHeaderError</span></span><a class="headerlink" href="#configparser.MissingSectionHeaderError" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Exception raised when attempting to parse a file which has no section
|
||
headers.</p>
|
||
</dd></dl>
|
||
|
||
<dl class="py exception">
|
||
<dt class="sig sig-object py" id="configparser.ParsingError">
|
||
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">configparser.</span></span><span class="sig-name descname"><span class="pre">ParsingError</span></span><a class="headerlink" href="#configparser.ParsingError" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Exception raised when errors occur attempting to parse a file.</p>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.12: </span>The <code class="docutils literal notranslate"><span class="pre">filename</span></code> attribute and <code class="xref py py-meth docutils literal notranslate"><span class="pre">__init__()</span></code> constructor argument were
|
||
removed. They have been available using the name <code class="docutils literal notranslate"><span class="pre">source</span></code> since 3.2.</p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<dl class="py exception">
|
||
<dt class="sig sig-object py" id="configparser.MultilineContinuationError">
|
||
<em class="property"><span class="k"><span class="pre">exception</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">configparser.</span></span><span class="sig-name descname"><span class="pre">MultilineContinuationError</span></span><a class="headerlink" href="#configparser.MultilineContinuationError" title="Link to this definition">¶</a></dt>
|
||
<dd><p>Exception raised when a key without a corresponding value is continued with
|
||
an indented line.</p>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">Added in version 3.13.</span></p>
|
||
</div>
|
||
</dd></dl>
|
||
|
||
<p class="rubric">Footnotes</p>
|
||
<aside class="footnote-list brackets">
|
||
<aside class="footnote brackets" id="id16" role="doc-footnote">
|
||
<span class="label"><span class="fn-bracket">[</span>1<span class="fn-bracket">]</span></span>
|
||
<span class="backrefs">(<a role="doc-backlink" href="#id1">1</a>,<a role="doc-backlink" href="#id2">2</a>,<a role="doc-backlink" href="#id3">3</a>,<a role="doc-backlink" href="#id4">4</a>,<a role="doc-backlink" href="#id5">5</a>,<a role="doc-backlink" href="#id6">6</a>,<a role="doc-backlink" href="#id7">7</a>,<a role="doc-backlink" href="#id8">8</a>,<a role="doc-backlink" href="#id9">9</a>,<a role="doc-backlink" href="#id11">10</a>,<a role="doc-backlink" href="#id12">11</a>)</span>
|
||
<p>Config parsers allow for heavy customization. If you are interested in
|
||
changing the behaviour outlined by the footnote reference, consult the
|
||
<a class="reference internal" href="#customizing-parser-behaviour">Customizing Parser Behaviour</a> section.</p>
|
||
</aside>
|
||
</aside>
|
||
</section>
|
||
</section>
|
||
|
||
|
||
<div class="clearer"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="sphinxsidebar" role="navigation" aria-label="Main">
|
||
<div class="sphinxsidebarwrapper">
|
||
<div>
|
||
<h3><a href="../contents.html">Table of Contents</a></h3>
|
||
<ul>
|
||
<li><a class="reference internal" href="#"><code class="xref py py-mod docutils literal notranslate"><span class="pre">configparser</span></code> — Configuration file parser</a><ul>
|
||
<li><a class="reference internal" href="#quick-start">Quick Start</a></li>
|
||
<li><a class="reference internal" href="#supported-datatypes">Supported Datatypes</a></li>
|
||
<li><a class="reference internal" href="#fallback-values">Fallback Values</a></li>
|
||
<li><a class="reference internal" href="#supported-ini-file-structure">Supported INI File Structure</a></li>
|
||
<li><a class="reference internal" href="#unnamed-sections">Unnamed Sections</a></li>
|
||
<li><a class="reference internal" href="#interpolation-of-values">Interpolation of values</a></li>
|
||
<li><a class="reference internal" href="#mapping-protocol-access">Mapping Protocol Access</a></li>
|
||
<li><a class="reference internal" href="#customizing-parser-behaviour">Customizing Parser Behaviour</a></li>
|
||
<li><a class="reference internal" href="#legacy-api-examples">Legacy API Examples</a></li>
|
||
<li><a class="reference internal" href="#configparser-objects">ConfigParser Objects</a></li>
|
||
<li><a class="reference internal" href="#rawconfigparser-objects">RawConfigParser Objects</a></li>
|
||
<li><a class="reference internal" href="#exceptions">Exceptions</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
</div>
|
||
<div>
|
||
<h4>Previous topic</h4>
|
||
<p class="topless"><a href="csv.html"
|
||
title="previous chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">csv</span></code> — CSV File Reading and Writing</a></p>
|
||
</div>
|
||
<div>
|
||
<h4>Next topic</h4>
|
||
<p class="topless"><a href="tomllib.html"
|
||
title="next chapter"><code class="xref py py-mod docutils literal notranslate"><span class="pre">tomllib</span></code> — Parse TOML files</a></p>
|
||
</div>
|
||
<div role="note" aria-label="source link">
|
||
<h3>This Page</h3>
|
||
<ul class="this-page-menu">
|
||
<li><a href="../bugs.html">Report a Bug</a></li>
|
||
<li>
|
||
<a href="https://github.com/python/cpython/blob/main/Doc/library/configparser.rst"
|
||
rel="nofollow">Show Source
|
||
</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<div id="sidebarbutton" title="Collapse sidebar">
|
||
<span>«</span>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="clearer"></div>
|
||
</div>
|
||
<div class="related" role="navigation" aria-label="Related">
|
||
<h3>Navigation</h3>
|
||
<ul>
|
||
<li class="right" style="margin-right: 10px">
|
||
<a href="../genindex.html" title="General Index"
|
||
>index</a></li>
|
||
<li class="right" >
|
||
<a href="../py-modindex.html" title="Python Module Index"
|
||
>modules</a> |</li>
|
||
<li class="right" >
|
||
<a href="tomllib.html" title="tomllib — Parse TOML files"
|
||
>next</a> |</li>
|
||
<li class="right" >
|
||
<a href="csv.html" title="csv — CSV File Reading and Writing"
|
||
>previous</a> |</li>
|
||
|
||
<li><img src="../_static/py.svg" alt="Python logo" style="vertical-align: middle; margin-top: -1px"/></li>
|
||
<li><a href="https://www.python.org/">Python</a> »</li>
|
||
<li class="switchers">
|
||
<div class="language_switcher_placeholder"></div>
|
||
<div class="version_switcher_placeholder"></div>
|
||
</li>
|
||
<li>
|
||
|
||
</li>
|
||
<li id="cpython-language-and-version">
|
||
<a href="../index.html">3.13.3 Documentation</a> »
|
||
</li>
|
||
|
||
<li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
|
||
<li class="nav-item nav-item-2"><a href="fileformats.html" >File Formats</a> »</li>
|
||
<li class="nav-item nav-item-this"><a href=""><code class="xref py py-mod docutils literal notranslate"><span class="pre">configparser</span></code> — Configuration file parser</a></li>
|
||
<li class="right">
|
||
|
||
|
||
<div class="inline-search" role="search">
|
||
<form class="inline-search" action="../search.html" method="get">
|
||
<input placeholder="Quick search" aria-label="Quick search" type="search" name="q" id="search-box" />
|
||
<input type="submit" value="Go" />
|
||
</form>
|
||
</div>
|
||
|
|
||
</li>
|
||
<li class="right">
|
||
<label class="theme-selector-label">
|
||
Theme
|
||
<select class="theme-selector" oninput="activateTheme(this.value)">
|
||
<option value="auto" selected>Auto</option>
|
||
<option value="light">Light</option>
|
||
<option value="dark">Dark</option>
|
||
</select>
|
||
</label> |</li>
|
||
|
||
</ul>
|
||
</div>
|
||
<div class="footer">
|
||
©
|
||
<a href="../copyright.html">
|
||
|
||
Copyright
|
||
|
||
</a>
|
||
2001-2025, Python Software Foundation.
|
||
<br />
|
||
This page is licensed under the Python Software Foundation License Version 2.
|
||
<br />
|
||
Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
|
||
<br />
|
||
|
||
See <a href="/license.html">History and License</a> for more information.<br />
|
||
|
||
|
||
<br />
|
||
|
||
The Python Software Foundation is a non-profit corporation.
|
||
<a href="https://www.python.org/psf/donations/">Please donate.</a>
|
||
<br />
|
||
<br />
|
||
Last updated on Apr 08, 2025 (14:33 UTC).
|
||
|
||
<a href="/bugs.html">Found a bug</a>?
|
||
|
||
<br />
|
||
|
||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
|
||
</div>
|
||
|
||
</body>
|
||
</html> |