|
- <!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.12.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=80d5e7a1" />
- <link rel="stylesheet" type="text/css" href="../_static/pydoctheme.css?v=bb723527" />
- <link id="pygments_dark_css" media="(prefers-color-scheme: dark)" rel="stylesheet" type="text/css" href="../_static/pygments_dark.css?v=b20cc3f5" />
-
- <script src="../_static/documentation_options.js?v=2c828074"></script>
- <script src="../_static/doctools.js?v=888ff710"></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.12.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>
-
- </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="#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 navigation">
- <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.12.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><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> — Configuration file parser<a class="headerlink" href="#module-configparser" title="Link to this heading">¶</a></h1>
- <p><strong>Source code:</strong> <a class="reference external" href="https://github.com/python/cpython/tree/3.12/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="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="#id15" 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="#id15" 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.</p>
- <div class="highlight-pycon notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">another_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">another_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">another_config</span><span class="p">[</span><span class="s1">'topsecret.server.example'</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">another_config</span><span class="o">.</span><span class="n">read_string</span><span class="p">(</span><span class="s2">"[topsecret.server.example]</span><span class="se">\n</span><span class="s2">Port=48484"</span><span class="p">)</span>
- <span class="gp">>>> </span><span class="n">another_config</span><span class="p">[</span><span class="s1">'topsecret.server.example'</span><span class="p">][</span><span class="s1">'Port'</span><span class="p">]</span>
- <span class="go">'48484'</span>
- <span class="gp">>>> </span><span class="n">another_config</span><span class="o">.</span><span class="n">read_dict</span><span class="p">({</span><span class="s2">"topsecret.server.example"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"Port"</span><span class="p">:</span> <span class="mi">21212</span><span class="p">}})</span>
- <span class="gp">>>> </span><span class="n">another_config</span><span class="p">[</span><span class="s1">'topsecret.server.example'</span><span class="p">][</span><span class="s1">'Port'</span><span class="p">]</span>
- <span class="go">'21212'</span>
- <span class="gp">>>> </span><span class="n">another_config</span><span class="p">[</span><span class="s1">'topsecret.server.example'</span><span class="p">][</span><span class="s1">'ForwardX11'</span><span class="p">]</span>
- <span class="go">'no'</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="#id15" 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="#id15" 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="#id15" 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="#id15" 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="#id15" 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>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="#id15" 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="#id15" 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="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="pre">class</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="#id15" id="id10" 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="pre">class</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">New 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="#id15" id="id11" 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="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="nn">configparser</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="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="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="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="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="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="id12"></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="pre">class</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="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><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>
- <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>
- <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="nn">configparser</span><span class="o">,</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">New 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">New 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">New 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.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="id14"></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="pre">class</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=None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dict_type=dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">allow_no_value=False</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">delimiters=('='</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">comment_prefixes=('#'</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">inline_comment_prefixes=None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">strict=True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">empty_lines_in_values=True</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">default_section=configparser.DEFAULTSECT</span></span></em><span class="optional">[</span>, <em class="sig-param"><span class="n"><span class="pre">interpolation</span></span></em><span class="optional">]</span><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.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="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="pre">exception</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="pre">exception</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="pre">exception</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="pre">exception</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="pre">exception</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="pre">exception</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="pre">exception</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="pre">exception</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="pre">exception</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="pre">exception</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="pre">exception</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>
-
- <p class="rubric">Footnotes</p>
- <aside class="footnote-list brackets">
- <aside class="footnote brackets" id="id15" 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="#id10">10</a>,<a role="doc-backlink" href="#id11">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 navigation">
- <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="#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 navigation">
- <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.12.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-2024, 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 09, 2024 (13:47 UTC).
-
- <a href="/bugs.html">Found a bug</a>?
-
- <br />
-
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 7.2.6.
- </div>
-
- </body>
- </html>
|