-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfigparser.html
More file actions
1151 lines (1054 loc) · 144 KB
/
Copy pathconfigparser.html
File metadata and controls
1151 lines (1054 loc) · 144 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>14.2. configparser — 設定ファイルのパーサー — Python 3.6.5 ドキュメント</title>
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
VERSION: '3.6.5',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt'
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../_static/translations.js"></script>
<script type="text/javascript" src="../_static/sidebar.js"></script>
<link rel="search" type="application/opensearchdescription+xml"
title="Python 3.6.5 ドキュメント 内を検索"
href="../_static/opensearch.xml"/>
<link rel="author" title="このドキュメントについて" href="../about.html" />
<link rel="index" title="索引" href="../genindex.html" />
<link rel="search" title="検索" href="../search.html" />
<link rel="copyright" title="Copyright" href="../copyright.html" />
<link rel="next" title="14.3. netrc — netrc ファイルの処理" href="netrc.html" />
<link rel="prev" title="14.1. csv — CSV ファイルの読み書き" href="csv.html" />
<link rel="shortcut icon" type="image/png" href="../_static/py.png" />
<link rel="canonical" href="https://docs.python.jp/3/library/configparser.html" /><script type="text/javascript">
$(document).ready(function() {
var base = 'https://docs.python.org/3.6/library/configparser.html';
$('a.headerlink').each(function() {
var html = '<a href="' + base + $(this).attr('href') +
'" title="原文へのリンク"><small>(原文)</small></a>';
$(this).after(html);
})
});
</script>
<script type="text/javascript" src="../_static/copybutton.js"></script>
<script type="text/javascript" src="../_static/version_switch.js"></script>
</head>
<body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>ナビゲーション</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="総索引"
accesskey="I">索引</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Pythonモジュール索引"
>モジュール</a> |</li>
<li class="right" >
<a href="netrc.html" title="14.3. netrc — netrc ファイルの処理"
accesskey="N">次へ</a> |</li>
<li class="right" >
<a href="csv.html" title="14.1. csv — CSV ファイルの読み書き"
accesskey="P">前へ</a> |</li>
<li><img src="../_static/py.png" alt=""
style="vertical-align: middle; margin-top: -1px"/></li>
<li><a href="https://www.python.org/">Python</a> »</li>
<li>
<span class="version_switcher_placeholder">3.6.5</span>
<a href="../index.html">ドキュメント</a> »
</li>
<li class="nav-item nav-item-1"><a href="index.html" >Python 標準ライブラリ</a> »</li>
<li class="nav-item nav-item-2"><a href="fileformats.html" accesskey="U">14. ファイルフォーマット</a> »</li>
<li class="right">
<div class="inline-search" style="display: none" role="search">
<form class="inline-search" action="../search.html" method="get">
<input placeholder="Quick search" type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
<script type="text/javascript">$('.inline-search').show(0);</script>
|
</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="module-configparser">
<span id="configparser-configuration-file-parser"></span><h1>14.2. <a class="reference internal" href="#module-configparser" title="configparser: Configuration file parser."><code class="xref py py-mod docutils literal"><span class="pre">configparser</span></code></a> — 設定ファイルのパーサー<a class="headerlink" href="#module-configparser" title="このヘッドラインへのパーマリンク">¶</a></h1>
<p><strong>ソースコード:</strong> <a class="reference external" href="https://github.com/python/cpython/tree/3.6/Lib/configparser.py">Lib/configparser.py</a></p>
<hr class="docutils" id="index-0" />
<p>このモジュールは、 Microsoft Windows の INI ファイルに似た構造を持ったベーシックな設定用言語を実装した <a class="reference internal" href="#configparser.ConfigParser" title="configparser.ConfigParser"><code class="xref py py-class docutils literal"><span class="pre">ConfigParser</span></code></a> クラスを提供します。このクラスを使ってユーザーが簡単にカスタマイズできる Python プログラムを作ることができます。</p>
<div class="admonition note">
<p class="first admonition-title">注釈</p>
<p class="last">このライブラリでは、Windowsのレジストリ用に拡張された INI 文法はサポート <em>していません</em> 。</p>
</div>
<div class="admonition seealso">
<p class="first admonition-title">参考</p>
<dl class="last docutils">
<dt><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"><span class="pre">shlex</span></code></a> モジュール</dt>
<dd>アプリケーション設定ファイルのフォーマットとして使える、Unix シェルに似たミニ言語の作成を支援します。</dd>
<dt><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"><span class="pre">json</span></code></a> モジュール</dt>
<dd>json モジュールは、同じ目的に利用できる JavaScript の文法のサブセットを実装しています。</dd>
</dl>
</div>
<div class="section" id="quick-start">
<h2>14.2.1. クイックスタート<a class="headerlink" href="#quick-start" title="このヘッドラインへのパーマリンク">¶</a></h2>
<p>次のような、非常に簡単な設定ファイルを例に考えましょう:</p>
<div class="highlight-ini"><div class="highlight"><pre><span></span><span class="k">[DEFAULT]</span>
<span class="na">ServerAliveInterval</span> <span class="o">=</span> <span class="s">45</span>
<span class="na">Compression</span> <span class="o">=</span> <span class="s">yes</span>
<span class="na">CompressionLevel</span> <span class="o">=</span> <span class="s">9</span>
<span class="na">ForwardX11</span> <span class="o">=</span> <span class="s">yes</span>
<span class="k">[bitbucket.org]</span>
<span class="na">User</span> <span class="o">=</span> <span class="s">hg</span>
<span class="k">[topsecret.server.com]</span>
<span class="na">Port</span> <span class="o">=</span> <span class="s">50022</span>
<span class="na">ForwardX11</span> <span class="o">=</span> <span class="s">no</span>
</pre></div>
</div>
<p>INI ファイルの構造は <a class="reference external" href="#supported-ini-file-structure">下のセクション</a> で解説します。
基本的に、ファイルは複数のセクションからなり、各セクションは複数のキーと値を持ちます。
<a class="reference internal" href="#module-configparser" title="configparser: Configuration file parser."><code class="xref py py-mod docutils literal"><span class="pre">configparser</span></code></a> のクラス群はそれらのファイルを読み書きできます。
まずは上のような設定ファイルをプログラムから作成してみましょう。</p>
<div class="highlight-python3"><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">'bitbucket.org'</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">'bitbucket.org'</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.com'</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.com'</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>この例でわかるように、config parser は辞書のように扱うことができます。辞書との違いは <a class="reference external" href="#mapping-protocol-access">後に</a> 説明しますが、このインターフェイスは辞書に対して期待するのととても近い動作をします。</p>
<p>これで設定ファイルを作成して保存できました。次はこれを読み込み直して、中のデータを取り出してみましょう。</p>
<div class="highlight-python3"><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="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">['bitbucket.org', 'topsecret.server.com']</span>
<span class="gp">>>> </span><span class="s1">'bitbucket.org'</span> <span class="ow">in</span> <span class="n">config</span>
<span class="go">True</span>
<span class="gp">>>> </span><span class="s1">'bytebong.com'</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">'bitbucket.org'</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.com'</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">'bitbucket.org'</span><span class="p">]:</span> <span class="nb">print</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<span class="gp">...</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">'bitbucket.org'</span><span class="p">][</span><span class="s1">'ForwardX11'</span><span class="p">]</span>
<span class="go">'yes'</span>
</pre></div>
</div>
<p>上の例からわかるように、API はとても直感的です。唯一の魔術は、<code class="docutils literal"><span class="pre">DEFAULT</span></code> セクションが他の全てのセクションのためのデフォルト値を提供していることです <a class="footnote-reference" href="#id14" id="id2">[1]</a>。 また、セクション内の各キーは大文字小文字を区別せず、全て小文字で保存されていることにも注意してください <a class="footnote-reference" href="#id14" id="id2">[1]</a>。</p>
</div>
<div class="section" id="supported-datatypes">
<h2>14.2.2. サポートされるデータ型<a class="headerlink" href="#supported-datatypes" title="このヘッドラインへのパーマリンク">¶</a></h2>
<p>Config parser は値のデータ型について何も推論せず、常に文字列のまま内部に保存します。他のデータ型が必要な場合は自分で変換する必要があります:</p>
<div class="highlight-python3"><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>このタスクはとても一般的なため、設定パーサーでは整数、浮動小数点数、真偽値を扱うための手頃なゲッターメソッドが提供されています。真偽値の扱いは一筋縄ではいきません。文字列を <code class="docutils literal"><span class="pre">bool()</span></code> に渡しても、 <code class="docutils literal"><span class="pre">bool('False')</span></code> が <code class="docutils literal"><span class="pre">True</span></code> になってしまいます。そこで config parser は <a class="reference internal" href="#configparser.ConfigParser.getboolean" title="configparser.ConfigParser.getboolean"><code class="xref py py-meth docutils literal"><span class="pre">getboolean()</span></code></a> を提供しています。このメソッドは大文字小文字を区別せず、 <code class="docutils literal"><span class="pre">'yes'</span></code>/<code class="docutils literal"><span class="pre">'no'</span></code>、<code class="docutils literal"><span class="pre">'on'</span></code>/<code class="docutils literal"><span class="pre">'off'</span></code>、<code class="docutils literal"><span class="pre">'true'</span></code>/<code class="docutils literal"><span class="pre">'false'</span></code>、<code class="docutils literal"><span class="pre">'1'</span></code>/<code class="docutils literal"><span class="pre">'0'</span></code> を真偽値として認識します <a class="footnote-reference" href="#id14" id="id3">[1]</a>。例えば:</p>
<div class="highlight-python3"><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">'bitbucket.org'</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">'bitbucket.org'</span><span class="p">,</span> <span class="s1">'Compression'</span><span class="p">)</span>
<span class="go">True</span>
</pre></div>
</div>
<p>config parser では、 <a class="reference internal" href="#configparser.ConfigParser.getboolean" title="configparser.ConfigParser.getboolean"><code class="xref py py-meth docutils literal"><span class="pre">getboolean()</span></code></a> 以外に <a class="reference internal" href="#configparser.ConfigParser.getint" title="configparser.ConfigParser.getint"><code class="xref py py-meth docutils literal"><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"><span class="pre">getfloat()</span></code></a> メソッドも提供されています。独自のコンバーターの登録、提供されたメソッドのカスタマイズもできます。 <a class="footnote-reference" href="#id14" id="id4">[1]</a></p>
</div>
<div class="section" id="fallback-values">
<h2>14.2.3. 代替値<a class="headerlink" href="#fallback-values" title="このヘッドラインへのパーマリンク">¶</a></h2>
<p>辞書と同じように、セクションの <code class="xref py py-meth docutils literal"><span class="pre">get()</span></code> メソッドは代替値を提供しています:</p>
<div class="highlight-python3"><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>デフォルト値は代替値よりも優先されることに注意してください。例えば上の例では、<code class="docutils literal"><span class="pre">'CompressionLevel'</span></code> キーは <code class="docutils literal"><span class="pre">'DEFAULT'</span></code> セクションにしか存在しません。その値を <code class="docutils literal"><span class="pre">'topsecret.server.com'</span></code> から取得しようとした場合、代替値を指定しても常にデフォルト値を返します:</p>
<div class="highlight-python3"><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>もう一つ注意すべき点は、パーサーレベルの(訳注: ConfigParserクラスの) <code class="xref py py-meth docutils literal"><span class="pre">get()</span></code> メソッドは、後方互換性のために、カスタムのより複雑なインターフェースを提供します。このメソッドを使用する際には、フォールバック値はキーワード引数としてのみ指定できる <code class="docutils literal"><span class="pre">fallback</span></code> 引数を介して提供されます:</p>
<div class="highlight-python3"><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">'bitbucket.org'</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>同様の <code class="docutils literal"><span class="pre">fallback</span></code> 引数を、<a class="reference internal" href="#configparser.ConfigParser.getint" title="configparser.ConfigParser.getint"><code class="xref py py-meth docutils literal"><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"><span class="pre">getfloat()</span></code></a> と <a class="reference internal" href="#configparser.ConfigParser.getboolean" title="configparser.ConfigParser.getboolean"><code class="xref py py-meth docutils literal"><span class="pre">getboolean()</span></code></a> メソッドでも使えます。例えば:</p>
<div class="highlight-python3"><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>
</div>
<div class="section" id="supported-ini-file-structure">
<h2>14.2.4. サポートするINI ファイルの構造<a class="headerlink" href="#supported-ini-file-structure" title="このヘッドラインへのパーマリンク">¶</a></h2>
<p>設定ファイルは複数のセクションから構成されます。セクションは、<code class="docutils literal"><span class="pre">[section]</span></code> ヘッダに続いた、特定の文字列(デフォルトでは <code class="docutils literal"><span class="pre">=</span></code> または <code class="docutils literal"><span class="pre">:</span></code> <a class="footnote-reference" href="#id14" id="id6">[1]</a> )で区切られたキーと値のエントリです。デフォルトでは、セクション名は大文字と小文字を区別しますが、キーはそうではありません <a class="footnote-reference" href="#id14" id="id6">[1]</a>。キーと値、それぞれの先頭と末尾の空白は取り除かれます。値は省略することができ、その際でも、キーと値の区切り文字は残しておけます。値はまた、値の先頭の行より深くインデントされていれば、複数の行にまたがっても構いません。パーサーのモードによって、空白行は、複数行からなる値の一部として扱われるか、無視されます。</p>
<p>設定ファイルには先頭に特定の文字 (デフォルトでは <code class="docutils literal"><span class="pre">#</span></code> および <code class="docutils literal"><span class="pre">;</span></code> <a class="footnote-reference" href="#id14" id="id8">[1]</a>) をつけてコメントをつけることができます。コメントは、他の内容がない行に置くことができ、インデントされていても構いません。<a class="footnote-reference" href="#id14" id="id8">[1]</a></p>
<p>例えば:</p>
<div class="highlight-ini"><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="o">=</span> <span class="s">obviously</span>
<span class="na">you can also use : to delimit keys from values</span>
<span class="k">[All Values Are Strings]</span>
<span class="na">values like this: 1000000</span>
<span class="na">or this: 3.14159265359</span>
<span class="na">are they treated as numbers? : no</span>
<span class="na">integers, floats and booleans are held as: strings</span>
<span class="na">can use the API to get converted values directly: true</span>
<span class="k">[Multiline Values]</span>
<span class="na">chorus: I'm a lumberjack, and I'm okay</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="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="k">[Sections Can Be Indented]</span>
<span class="na">can_values_be_as_well</span> <span class="o">=</span> <span class="s">True</span>
<span class="s"> does_that_mean_anything_special = False</span>
<span class="s"> purpose = formatting for readability</span>
<span class="s"> multiline_values = are</span>
<span class="s"> handled just fine as</span>
<span class="s"> long as they are indented</span>
<span class="s"> deeper than the first line</span>
<span class="s"> of a value</span>
<span class="s"> # Did I mention we can indent comments, too?</span>
</pre></div>
</div>
</div>
<div class="section" id="interpolation-of-values">
<h2>14.2.5. 値の補間<a class="headerlink" href="#interpolation-of-values" title="このヘッドラインへのパーマリンク">¶</a></h2>
<p>コア機能に加えて、 <a class="reference internal" href="#configparser.ConfigParser" title="configparser.ConfigParser"><code class="xref py py-class docutils literal"><span class="pre">ConfigParser</span></code></a> は補間(interpolation, 内挿とも)をサポートします。これは <code class="docutils literal"><span class="pre">get()</span></code> コールが値を返す前に、その値に対して前処理を行えることを意味します。</p>
<dl class="class">
<dt id="configparser.BasicInterpolation">
<em class="property">class </em><code class="descclassname">configparser.</code><code class="descname">BasicInterpolation</code><a class="headerlink" href="#configparser.BasicInterpolation" title="この定義へのパーマリンク">¶</a></dt>
<dd><p><a class="reference internal" href="#configparser.ConfigParser" title="configparser.ConfigParser"><code class="xref py py-class docutils literal"><span class="pre">ConfigParser</span></code></a> が使用するデフォルト実装です。値に、同じセクションか特別なデフォルトセクション中 <a class="footnote-reference" href="#id14" id="id9">[1]</a> の他の値を参照するフォーマット文字列を含めることができます。追加のデフォルト値を初期化時に提供できます。</p>
<p>例えば:</p>
<div class="highlight-ini"><div class="highlight"><pre><span></span><span class="k">[Paths]</span>
<span class="na">home_dir: /Users</span>
<span class="na">my_dir: %(home_dir)s/lumberjack</span>
<span class="na">my_pictures: %(my_dir)s/Pictures</span>
</pre></div>
</div>
<p>上の例では、 <em>interpolation</em> に <code class="docutils literal"><span class="pre">BasicInterpolation()</span></code> を設定した <a class="reference internal" href="#configparser.ConfigParser" title="configparser.ConfigParser"><code class="xref py py-class docutils literal"><span class="pre">ConfigParser</span></code></a> が <code class="docutils literal"><span class="pre">%(home_dir)s</span></code> を <code class="docutils literal"><span class="pre">home_dir</span></code> の値(このケースでは <code class="docutils literal"><span class="pre">/Users</span></code> )として解決しています、その結果 <code class="docutils literal"><span class="pre">%(my_dir)s</span></code> は <code class="docutils literal"><span class="pre">/Users/lumberjack</span></code> になります。全ての補間は必要に応じて実行されるため、設定ファイル中で参照の連鎖をもつキーを特定の順序で記述する必要はありません。</p>
<p><code class="docutils literal"><span class="pre">interpolation</span></code> に <code class="docutils literal"><span class="pre">None</span></code> を設定すれば、パーサーは単に <code class="docutils literal"><span class="pre">my_pictures</span></code> の値として <code class="docutils literal"><span class="pre">%(my_dir)s/Pictures</span></code> を返し、<code class="docutils literal"><span class="pre">my_dir</span></code> の値として <code class="docutils literal"><span class="pre">%(home_dir)s/lumberjack</span></code> を返します。</p>
</dd></dl>
<dl class="class">
<dt id="configparser.ExtendedInterpolation">
<em class="property">class </em><code class="descclassname">configparser.</code><code class="descname">ExtendedInterpolation</code><a class="headerlink" href="#configparser.ExtendedInterpolation" title="この定義へのパーマリンク">¶</a></dt>
<dd><p><code class="docutils literal"><span class="pre">zc.buildout</span></code> で使用されるような、より高度な文法を実装した補間ハンドラの別の選択肢です。拡張された補間は、他のセクション中の値を示すのに <code class="docutils literal"><span class="pre">${section:option}</span></code> と書けます。補間は複数のレベルに及べます、利便性のために、もし <code class="docutils literal"><span class="pre">section:</span></code> の部分が省略されると、現在のセクションがデフォルト値となります(スペシャルセクション中のデフォルト値を使用することもできます)。</p>
<p>たとえば、上記の basic interpolation で指定した設定は、extended interpolation を使うと下記のようになります:</p>
<div class="highlight-ini"><div class="highlight"><pre><span></span><span class="k">[Paths]</span>
<span class="na">home_dir: /Users</span>
<span class="na">my_dir: ${home_dir}/lumberjack</span>
<span class="na">my_pictures: ${my_dir}/Pictures</span>
</pre></div>
</div>
<p>他のセクションから値を持ってくることもできます:</p>
<div class="highlight-ini"><div class="highlight"><pre><span></span><span class="k">[Common]</span>
<span class="na">home_dir: /Users</span>
<span class="na">library_dir: /Library</span>
<span class="na">system_dir: /System</span>
<span class="na">macports_dir: /opt/local</span>
<span class="k">[Frameworks]</span>
<span class="na">Python: 3.2</span>
<span class="na">path: ${Common:system_dir}/Library/Frameworks/</span>
<span class="k">[Arthur]</span>
<span class="na">nickname: Two Sheds</span>
<span class="na">last_name: Jackson</span>
<span class="na">my_dir: ${Common:home_dir}/twosheds</span>
<span class="na">my_pictures: ${my_dir}/Pictures</span>
<span class="na">python_dir: ${Frameworks:path}/Python/Versions/${Frameworks:Python}</span>
</pre></div>
</div>
</dd></dl>
</div>
<div class="section" id="mapping-protocol-access">
<h2>14.2.6. マップ型プロトコルアクセス<a class="headerlink" href="#mapping-protocol-access" title="このヘッドラインへのパーマリンク">¶</a></h2>
<div class="versionadded">
<p><span class="versionmodified">バージョン 3.2 で追加.</span></p>
</div>
<p>マップ型プロトコルアクセスは、カスタムオブジェクトを辞書であるかのように使うための機能の総称です。 <a class="reference internal" href="#module-configparser" title="configparser: Configuration file parser."><code class="xref py py-mod docutils literal"><span class="pre">configparser</span></code></a> の場合、マップ型インタフェースの実装は <code class="docutils literal"><span class="pre">parser['section']['option']</span></code> 表記を使います。</p>
<p>とくに、<code class="docutils literal"><span class="pre">parser['section']</span></code> はパーサー内のそのセクションのデータへのプロキシを返します。つまり、値はコピーされるのではなく必要に応じてオリジナルのパーサーから取られます。さらに重要なことに、セクションのプロキシの値が変更されると、オリジナルのパーサー中の値が実際に変更されます。</p>
<p><a class="reference internal" href="#module-configparser" title="configparser: Configuration file parser."><code class="xref py py-mod docutils literal"><span class="pre">configparser</span></code></a> は可能な限り実際の辞書と近い振る舞いをします。マップ型インタフェースは <a class="reference internal" href="collections.abc.html#collections.abc.MutableMapping" title="collections.abc.MutableMapping"><code class="xref py py-class docutils literal"><span class="pre">MutableMapping</span></code></a> を矛盾なく完成します。しかし、考慮するべき違いがいくつかあります:</p>
<ul>
<li><p class="first">デフォルトでは、セクション内の全てのキーは大文字小文字の区別なくアクセスできます <a class="footnote-reference" href="#id14" id="id10">[1]</a>。例えば、<code class="docutils literal"><span class="pre">for</span> <span class="pre">option</span> <span class="pre">in</span> <span class="pre">parser["section"]</span></code> は <code class="docutils literal"><span class="pre">optionxform</span></code> されたオプションキー名のみを yield します。つまり小文字のキーがデフォルトです。同時に、キー <code class="docutils literal"><span class="pre">'a'</span></code> を含むセクションにおいて、どちらの式も <code class="docutils literal"><span class="pre">True</span></code> を返します:</p>
<div class="highlight-python3"><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 class="first">全てのセクションは <code class="docutils literal"><span class="pre">DEFAULTSECT</span></code> 値を持ち、すなわちセクションで <code class="docutils literal"><span class="pre">.clear()</span></code> してもセクションは見た目上空になりません。これは、デフォルト値は (技術的にはそこにないので) セクションから削除できないためです。デフォルト値が上書きされた場合、それが削除されるとデフォルト値が再び見えるようになります。デフォルト値を削除しようとすると <code class="docutils literal"><span class="pre">KeyError</span></code> が発生します。</p>
</li>
<li><p class="first"><code class="docutils literal"><span class="pre">DEFAULTSECT</span></code> はパーサーから取り除けません:</p>
<ul class="simple">
<li>削除しようとすると <code class="docutils literal"><span class="pre">ValueError</span></code> が発生します。</li>
<li><code class="docutils literal"><span class="pre">parser.clear()</span></code> はこれをそのまま残し、</li>
<li><code class="docutils literal"><span class="pre">parser.popitem()</span></code> がこれを返すことはありません。</li>
</ul>
</li>
<li><p class="first"><code class="docutils literal"><span class="pre">parser.get(section,</span> <span class="pre">option,</span> <span class="pre">**kwargs)</span></code> - 第二引数は代替値では <em>ありません</em>。ただし、セクションごとの <code class="docutils literal"><span class="pre">get()</span></code> メソッドはマップ型プロトコルと旧式の configparser API の両方に互換です。</p>
</li>
<li><p class="first"><code class="docutils literal"><span class="pre">parser.items()</span></code> はマップ型プロトコルと互換です (DEFAULTSECT を含む <em>section_name</em>, <em>section_proxy</em> 対のリストを返します)。ただし、このメソッドは <code class="docutils literal"><span class="pre">parser.items(section,</span> <span class="pre">raw,</span> <span class="pre">vars)</span></code> のようにして引数を与えることでも呼び出せます。後者の呼び出しは指定された <code class="docutils literal"><span class="pre">section</span></code> の <em>option</em>, <em>value</em> 対のリストを、(<code class="docutils literal"><span class="pre">raw=True</span></code> が与えられない限り) 全ての補間を展開して返します。</p>
</li>
</ul>
<p>マップ型プロトコルは、既存のレガシーな API の上に実装されているので、オリジナルのインタフェースを上書きする派生クラスもまたは期待どおりにはたらきます。</p>
</div>
<div class="section" id="customizing-parser-behaviour">
<h2>14.2.7. パーサーの振る舞いをカスタマイズする<a class="headerlink" href="#customizing-parser-behaviour" title="このヘッドラインへのパーマリンク">¶</a></h2>
<p>INI フォーマットの変種は、それを使うアプリケーションの数と同じくらい多く存在します。 <a class="reference internal" href="#module-configparser" title="configparser: Configuration file parser."><code class="xref py py-mod docutils literal"><span class="pre">configparser</span></code></a> は、可能な限り広い範囲の INI スタイルを集めた集合をサポートするために、非常に役立ちます。デフォルトの機能は主に歴史的背景によって決められたので、機能によってはカスタマイズしてお使いください。</p>
<p>特定の設定パーサーのはたらきを変える最も一般的な方法は <a class="reference internal" href="../reference/datamodel.html#object.__init__" title="object.__init__"><code class="xref py py-meth docutils literal"><span class="pre">__init__()</span></code></a> オプションを使うことです:</p>
<ul>
<li><p class="first"><em>defaults</em>, デフォルト値: <code class="docutils literal"><span class="pre">None</span></code></p>
<p>このオプションは最初に <code class="docutils literal"><span class="pre">DEFAULT</span></code> セクションに加えられるキー-値の対の辞書を受け付けます。</p>
<p>ヒント: 特定のセクションにデフォルト値を指定したいなら、実際のファイルを読み込む前に <code class="xref py py-meth docutils literal"><span class="pre">read_dict()</span></code> を使ってください。</p>
</li>
<li><p class="first"><em>dict_type</em>, デフォルト値: <a class="reference internal" href="collections.html#collections.OrderedDict" title="collections.OrderedDict"><code class="xref py py-class docutils literal"><span class="pre">collections.OrderedDict</span></code></a></p>
<p>このオプションはマップ型プロトコルの振る舞い方や書き込まれる設定ファイルの見た目に大きく影響します。デフォルトの順序付き辞書では、全てのセクションはパーサーに加えられた順に並びます。同じことがセクション内のオプションにも言えます。</p>
<p>セクションとオプションをライトバック時にソートするためなどに、別の辞書型も使えます。パフォーマンスの理由のために普通の辞書を使うこともできます。</p>
<p>注意: 一度の操作でキー-値の対を複数追加する方法もあります。そのような操作に普通の辞書を使うと、キーの並び順はランダムになります。例えば:</p>
<div class="highlight-python3"><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">['section3', 'section2', 'section1']</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">['baz', 'foo', 'bar']</span>
</pre></div>
</div>
<p>このような操作には、順序付き辞書を使用する方がよいです:</p>
<div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">collections</span> <span class="k">import</span> <span class="n">OrderedDict</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="gp">... </span> <span class="n">OrderedDict</span><span class="p">((</span>
<span class="gp">... </span> <span class="p">(</span><span class="s1">'s1'</span><span class="p">,</span>
<span class="gp">... </span> <span class="n">OrderedDict</span><span class="p">((</span>
<span class="gp">... </span> <span class="p">(</span><span class="s1">'1'</span><span class="p">,</span> <span class="s1">'2'</span><span class="p">),</span>
<span class="gp">... </span> <span class="p">(</span><span class="s1">'3'</span><span class="p">,</span> <span class="s1">'4'</span><span class="p">),</span>
<span class="gp">... </span> <span class="p">(</span><span class="s1">'5'</span><span class="p">,</span> <span class="s1">'6'</span><span class="p">),</span>
<span class="gp">... </span> <span class="p">))</span>
<span class="gp">... </span> <span class="p">),</span>
<span class="gp">... </span> <span class="p">(</span><span class="s1">'s2'</span><span class="p">,</span>
<span class="gp">... </span> <span class="n">OrderedDict</span><span class="p">((</span>
<span class="gp">... </span> <span class="p">(</span><span class="s1">'a'</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">),</span>
<span class="gp">... </span> <span class="p">(</span><span class="s1">'c'</span><span class="p">,</span> <span class="s1">'d'</span><span class="p">),</span>
<span class="gp">... </span> <span class="p">(</span><span class="s1">'e'</span><span class="p">,</span> <span class="s1">'f'</span><span class="p">),</span>
<span class="gp">... </span> <span class="p">))</span>
<span class="gp">... </span> <span class="p">),</span>
<span class="gp">... </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">['s1', 's2']</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">'s1'</span><span class="p">]]</span>
<span class="go">['1', '3', '5']</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">'s2'</span><span class="p">]</span><span class="o">.</span><span class="n">values</span><span class="p">()]</span>
<span class="go">['b', 'd', 'f']</span>
</pre></div>
</div>
</li>
<li><p class="first"><em>allow_no_value</em>, デフォルト値: <code class="docutils literal"><span class="pre">False</span></code></p>
<p>一部の設定ファイルには値のない設定項目がありますが、それ以外は <code class="xref py py-mod docutils literal"><span class="pre">ConfigParser</span></code> がサポートする文法に従います。コンストラクタの <em>allow_no_value</em> 引数で、そのような値を許可することができます。</p>
<div class="highlight-python3"><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="c">...</span>
<span class="gr">KeyError</span>: <span class="n">'does-not-exist'</span>
</pre></div>
</div>
</li>
<li><p class="first"><em>delimiters</em>, デフォルト値: <code class="docutils literal"><span class="pre">('=',</span> <span class="pre">':')</span></code></p>
<p>デリミタはセクション内でキーを値から区切る部分文字列です。行中で最初に現れた区切り部分文字列がデリミタと見なされます。つまり値にはデリミタを含めることができます (キーには含めることができません)。</p>
<p><a class="reference internal" href="#configparser.ConfigParser.write" title="configparser.ConfigParser.write"><code class="xref py py-meth docutils literal"><span class="pre">ConfigParser.write()</span></code></a> の <em>space_around_delimiters</em> 引数も参照してください。</p>
</li>
<li><p class="first"><em>comment_prefixes</em>, デフォルト値: <code class="docutils literal"><span class="pre">('#',</span> <span class="pre">';')</span></code></p>
</li>
<li><p class="first"><em>inline_comment_prefixes</em>, デフォルト値: <code class="docutils literal"><span class="pre">None</span></code></p>
<p>コメント接頭辞は設定ファイル中で有効なコメントの開始を示す文字列です。<em>comment_prefixes</em> は他の内容がない行 (インデントは自由) にのみ使用でき、<em>inline_comment_prefixes</em> は任意の有効な値 (例えば、セクション名、オプション、空行も可能) の後に使えます。デフォルトではインラインコメントは無効化されていて、<code class="docutils literal"><span class="pre">'#'</span></code> と <code class="docutils literal"><span class="pre">';'</span></code> を行全体のコメントに使用します。</p>
<div class="versionchanged">
<p><span class="versionmodified">バージョン 3.2 で変更: </span>以前のバージョンの <a class="reference internal" href="#module-configparser" title="configparser: Configuration file parser."><code class="xref py py-mod docutils literal"><span class="pre">configparser</span></code></a> の振る舞いは <code class="docutils literal"><span class="pre">comment_prefixes=('#',';')</span></code> および <code class="docutils literal"><span class="pre">inline_comment_prefixes=(';',)</span></code> に該当します。</p>
</div>
<p>設定パーサーはコメント接頭辞のエスケープをサポートしないので、<em>inline_comment_prefixes</em> はユーザーがコメント接頭辞として使われる文字を含むオプション値を指定するのを妨げる可能性があります。疑わしい場合には、<em>inline_comment_prefixes</em> を設定しないようにしてください。どのような状況でも、複数行にわたる値で、行の先頭にコメント接頭辞文字を保存する唯一の方法は、次の例のように接頭辞を補間することです:</p>
<div class="highlight-python3"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">configparser</span> <span class="k">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="s2"></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="s2"></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="s2"></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 class="first"><em>strict</em>, デフォルト値: <code class="docutils literal"><span class="pre">True</span></code></p>
<p><code class="docutils literal"><span class="pre">True</span></code> に設定された場合、パーサーは単一のソースから (<code class="xref py py-meth docutils literal"><span class="pre">read_file()</span></code>, <code class="xref py py-meth docutils literal"><span class="pre">read_string()</span></code> または <code class="xref py py-meth docutils literal"><span class="pre">read_dict()</span></code> を使って) 読み込むときにセクションやオプションの重複を許さなくなります。新しいアプリケーションには strict なパーサーを使うことが推奨されます。</p>
<div class="versionchanged">
<p><span class="versionmodified">バージョン 3.2 で変更: </span>以前のバージョンの <a class="reference internal" href="#module-configparser" title="configparser: Configuration file parser."><code class="xref py py-mod docutils literal"><span class="pre">configparser</span></code></a> の振る舞いは <code class="docutils literal"><span class="pre">strict=False</span></code> に該当します。</p>
</div>
</li>
<li><p class="first"><em>empty_lines_in_values</em>, デフォルト値: <code class="docutils literal"><span class="pre">True</span></code></p>
<p>設定パーサーでは、キーよりもその値を深くインデントするかぎり、複数行にまたがる値を使えます。デフォルトのパーサーはさらにその値の間に空行を置けます。同時に、キーは読みやすくするため任意にインデントできます。結果として、設定ファイルが大きく複雑になったとき、ユーザーがファイル構造を見失いやすいです。この例をご覧ください:</p>
<div class="highlight-ini"><div class="highlight"><pre><span></span><span class="k">[Section]</span>
<span class="na">key</span> <span class="o">=</span> <span class="s">multiline</span>
<span class="s"> value with a gotcha</span>
<span class="na">this</span> <span class="o">=</span> <span class="s">is still a part of the multiline value of 'key'</span>
</pre></div>
</div>
<p>これは特にプロポーショナルフォントを使ってファイルを編集しているユーザーにとって問題になることがあります。だから、アプリケーションの値に空行が必要ないなら、空行を認めないべきです。これによって空行で必ずキーが分かれます。上の例では、2 つのキー、<code class="docutils literal"><span class="pre">key</span></code> および <code class="docutils literal"><span class="pre">this</span></code> が作られます。</p>
</li>
<li><p class="first"><em>default_section</em>, デフォルト値: <code class="docutils literal"><span class="pre">configparser.DEFAULTSECT</span></code> (すなわち: <code class="docutils literal"><span class="pre">"DEFAULT"</span></code>)</p>
<p>他のセクションのデフォルト値や補間目的での特別なセクションを認める慣行はこのライブラリの明確なコンセプトの一つで、ユーザーは複雑で宣言的な設定を作成できます。このセクションは通常 <code class="docutils literal"><span class="pre">"DEFAULT"</span></code> と呼ばれますが、任意の有効なセクション名を指すようにカスタマイズできます。典型的な値には <code class="docutils literal"><span class="pre">"general"</span></code> や <code class="docutils literal"><span class="pre">"common"</span></code> があります。与えられた名前はソースを読み込む際にデフォルトセクションを認識するのに使われ、設定をファイルに書き戻すときにも使われます。現在の値は <code class="docutils literal"><span class="pre">parser_instance.default_section</span></code> 属性から取り出すことができ、実行時 (すなわちファイルを別のフォーマットに変換するとき) に変更することもできます。</p>
</li>
<li><p class="first"><em>interpolation</em>, デフォルト値: <code class="docutils literal"><span class="pre">configparser.BasicInterpolation</span></code></p>
<p>補間の振る舞いは、 <em>interpolation</em> 引数を通してカスタムハンドラを与えることでカスタマイズできます。 <code class="docutils literal"><span class="pre">None</span></code> 引数を使うと補間を完全に無効にできます。 <code class="docutils literal"><span class="pre">ExtendedInterpolation()</span></code> は、 <code class="docutils literal"><span class="pre">zc.buildout</span></code> に影響を受けたより高度な補間を提供します。この話題に <a class="reference external" href="#interpolation-of-values">特化したドキュメントのセクション</a> をご覧ください。 <a class="reference internal" href="#configparser.RawConfigParser" title="configparser.RawConfigParser"><code class="xref py py-class docutils literal"><span class="pre">RawConfigParser</span></code></a> のデフォルト値は <code class="docutils literal"><span class="pre">None</span></code> です。</p>
</li>
<li><p class="first"><em>converters</em>, デフォルト値: 未設定</p>
<p>設定パーサーは、型変換を実行するオプションの値ゲッターを提供します。デフォルトでは、 <a class="reference internal" href="#configparser.ConfigParser.getint" title="configparser.ConfigParser.getint"><code class="xref py py-meth docutils literal"><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"><span class="pre">getfloat()</span></code></a>、 <a class="reference internal" href="#configparser.ConfigParser.getboolean" title="configparser.ConfigParser.getboolean"><code class="xref py py-meth docutils literal"><span class="pre">getboolean()</span></code></a> が実装されています。他のゲッターが必要な場合、ユーザーはそれらをサブクラスで定義するか、辞書を渡します。辞書を渡す場合、各キーはコンバーターの名前で、値は当該変換を実装する呼び出し可能オブジェクトです。例えば、 <code class="docutils literal"><span class="pre">{'decimal':</span> <span class="pre">decimal.Decimal}</span></code> を渡すと、パーサーオブジェクトとすべてのセクションプロキシの両方に、 <code class="xref py py-meth docutils literal"><span class="pre">getdecimal()</span></code> が追加されます。つまり、<code class="docutils literal"><span class="pre">parser_instance.getdecimal('section',</span> <span class="pre">'key',</span> <span class="pre">fallback=0)</span></code> と <code class="docutils literal"><span class="pre">parser_instance['section'].getdecimal('key',</span> <span class="pre">0)</span></code> の両方の方法で書くことができます。</p>
<p>コンバーターがパーサーの状態にアクセスする必要がある場合、設定パーサーサブクラスでメソッドとして実装することができます。このメソッドの名前が <code class="docutils literal"><span class="pre">get</span></code> から始まる場合、すべてのセクションプロキシで、辞書と互換性のある形式で利用できます (上記の <code class="docutils literal"><span class="pre">getdecimal()</span></code> の例を参照)。</p>
</li>
</ul>
<p>これらのパーサー引数のデフォルト値を上書きすれば、さらに進んだカスタマイズができます。デフォルトはクラスで定義されているので、派生クラスや属性の代入で上書きできます。</p>
<dl class="attribute">
<dt id="configparser.BOOLEAN_STATES">
<code class="descclassname">configparser.</code><code class="descname">BOOLEAN_STATES</code><a class="headerlink" href="#configparser.BOOLEAN_STATES" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>デフォルトでは、 <a class="reference internal" href="#configparser.ConfigParser.getboolean" title="configparser.ConfigParser.getboolean"><code class="xref py py-meth docutils literal"><span class="pre">getboolean()</span></code></a> を使うことで、設定パーサーは以下の値を <code class="docutils literal"><span class="pre">True</span></code> と見なします: <code class="docutils literal"><span class="pre">'1'</span></code>, <code class="docutils literal"><span class="pre">'yes'</span></code>, <code class="docutils literal"><span class="pre">'true'</span></code>, <code class="docutils literal"><span class="pre">'on'</span></code> 。以下の値を <code class="docutils literal"><span class="pre">False</span></code> と見なします: <code class="docutils literal"><span class="pre">'0'</span></code>, <code class="docutils literal"><span class="pre">'no'</span></code>, <code class="docutils literal"><span class="pre">'false'</span></code>, <code class="docutils literal"><span class="pre">'off'</span></code> 。文字列と対応するブール値のカスタム辞書を指定することでこれを上書きできます。たとえば:</p>
<div class="highlight-python3"><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>ほかの典型的なブール値ペアには <code class="docutils literal"><span class="pre">accept</span></code>/<code class="docutils literal"><span class="pre">reject</span></code> や <code class="docutils literal"><span class="pre">enabled</span></code>/<code class="docutils literal"><span class="pre">disabled</span></code> などがあります。</p>
</dd></dl>
<dl class="method">
<dt id="configparser.optionxform">
<code class="descclassname">configparser.</code><code class="descname">optionxform</code><span class="sig-paren">(</span><em>option</em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.optionxform" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>このメソッドは読み込み、取得、設定操作のたびにオプション名を変換します。デフォルトでは名前を小文字に変換します。従って設定ファイルが書き込まれるとき、すべてのキーは小文字になります。それがふさわしくなければ、このメソッドを上書きしてください。例えば:</p>
<div class="highlight-python3"><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="s2"></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>
</dd></dl>
<dl class="attribute">
<dt id="configparser.SECTCRE">
<code class="descclassname">configparser.</code><code class="descname">SECTCRE</code><a class="headerlink" href="#configparser.SECTCRE" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>セクションヘッダを解析するのに使われる、コンパイルされた正規表現です。デフォルトでは <code class="docutils literal"><span class="pre">[section]</span></code> が <code class="docutils literal"><span class="pre">"section"</span></code> という名前にマッチします。空白はセクション名の一部と見なされるので、<code class="docutils literal"><span class="pre">[</span>  <span class="pre">larch</span>  <span class="pre">]</span></code> は <code class="docutils literal"><span class="pre">"</span>  <span class="pre">larch</span>  <span class="pre">"</span></code> という名のセクションとして読み込まれます。これがふさわしくない場合、このメソッドを上書きしてください。例えば:</p>
<div class="highlight-python3"><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">[Section 1]</span>
<span class="gp">... </span><span class="s2">option = value</span>
<span class="gp">...</span><span class="s2"></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="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="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="first admonition-title">注釈</p>
<p class="last">ConfigParser オブジェクトはオプション行の認識に <code class="docutils literal"><span class="pre">OPTCRE</span></code> 属性も使いますが、これを上書きすることは推奨されません。上書きするとコンストラクタオプション <em>allow_no_value</em> および <em>delimiters</em> に干渉します。</p>
</div>
</dd></dl>
</div>
<div class="section" id="legacy-api-examples">
<h2>14.2.8. レガシーな API の例<a class="headerlink" href="#legacy-api-examples" title="このヘッドラインへのパーマリンク">¶</a></h2>
<p>主に後方互換性問題の理由から、 <a class="reference internal" href="#module-configparser" title="configparser: Configuration file parser."><code class="xref py py-mod docutils literal"><span class="pre">configparser</span></code></a> は <code class="docutils literal"><span class="pre">get</span></code>/<code class="docutils literal"><span class="pre">set</span></code> メソッドを明示するレガシーな API も提供します。メソッドを以下に示すように使うこともできますが、新しいプロジェクトではマップ型プロトコルでアクセスするのが望ましいです。レガシーな API は時折高度で、低レベルで、まったく直感的ではありません。</p>
<p>設定ファイルを書き出す例:</p>
<div class="highlight-python3"><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>設定ファイルを読み込む例:</p>
<div class="highlight-python3"><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>補間するには、 <a class="reference internal" href="#configparser.ConfigParser" title="configparser.ConfigParser"><code class="xref py py-class docutils literal"><span class="pre">ConfigParser</span></code></a> を使ってください:</p>
<div class="highlight-python3"><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>どちらの型の ConfigParsers でもデフォルト値が利用できます。使われているオプションがどこにも定義されていなければ、そのデフォルト値が補間に使われます。</p>
<div class="highlight-python3"><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>
</div>
<div class="section" id="configparser-objects">
<span id="id11"></span><h2>14.2.9. ConfigParser オブジェクト<a class="headerlink" href="#configparser-objects" title="このヘッドラインへのパーマリンク">¶</a></h2>
<dl class="class">
<dt id="configparser.ConfigParser">
<em class="property">class </em><code class="descclassname">configparser.</code><code class="descname">ConfigParser</code><span class="sig-paren">(</span><em>defaults=None</em>, <em>dict_type=collections.OrderedDict</em>, <em>allow_no_value=False</em>, <em>delimiters=('='</em>, <em>':')</em>, <em>comment_prefixes=('#'</em>, <em>';')</em>, <em>inline_comment_prefixes=None</em>, <em>strict=True</em>, <em>empty_lines_in_values=True</em>, <em>default_section=configparser.DEFAULTSECT</em>, <em>interpolation=BasicInterpolation()</em>, <em>converters={}</em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>主要な設定パーサーです。<em>defaults</em> が与えられれば、その辞書の持つ初期値で初期化されます。<em>dict_type</em> が与えられれば、それがセクションの一覧、セクション中のオプション、およびデフォルト値の辞書オブジェクトを作成するのに使われます。</p>
<p><em>delimiters</em> が与えられた場合、キーと値を分割する部分文字列の組み合わせとして使われます。<em>comment_prefixes</em> が与えられた場合、他の内容がない行のコメントに接頭する部分文字列の組み合わせとして使われます。コメントはインデントできます。<em>inline_comment_prefixes</em> が与えられた場合、非空行のコメントに接頭する部分文字列としての組み合わせとして使われます。</p>
<p><em>strict</em> が <code class="docutils literal"><span class="pre">True</span></code> (デフォルト) であれば、パーサーは単一のソース (ファイル、文字列、辞書) 中にセクションやオプションの重複を認めず、 <a class="reference internal" href="#configparser.DuplicateSectionError" title="configparser.DuplicateSectionError"><code class="xref py py-exc docutils literal"><span class="pre">DuplicateSectionError</span></code></a> や <a class="reference internal" href="#configparser.DuplicateOptionError" title="configparser.DuplicateOptionError"><code class="xref py py-exc docutils literal"><span class="pre">DuplicateOptionError</span></code></a> を送出します。 <em>empty_lines_in_values</em> が <code class="docutils literal"><span class="pre">False</span></code> (デフォルト: <code class="docutils literal"><span class="pre">True</span></code>) なら、空行はそれぞれオプションの終わりを示します。 <em>allow_no_value</em> が <code class="docutils literal"><span class="pre">True</span></code> (デフォルト: <code class="docutils literal"><span class="pre">False</span></code>) なら、値のないオプションが受け付けられます。そのオプションの値は <code class="docutils literal"><span class="pre">None</span></code> となり、後端のデリミタを除いてシリアル化されます。</p>
<p><em>default_section</em> が与えられた場合、他のセクションへのデフォルト値や補間のためのデフォルト値を保持する特別なセクションの名前を指定します (通常は <code class="docutils literal"><span class="pre">"DEFAULT"</span></code> という名前です)。この値は実行時に <code class="docutils literal"><span class="pre">default_section</span></code> インスタンス属性を使って取得や変更ができます。</p>
<p>補間の動作は、 <em>interpolation</em> 引数を通してカスタムハンドラを与えることでカスタマイズできます。 <code class="docutils literal"><span class="pre">None</span></code> 引数を使うと補間を完全に無効にできます。 <code class="docutils literal"><span class="pre">ExtendedInterpolation()</span></code> は、 <code class="docutils literal"><span class="pre">zc.buildout</span></code> に影響を受けたより高度な補間を提供します。この件に <a class="reference external" href="#interpolation-of-values">特化したドキュメントのセクション</a> を参照してください。</p>
<p>補間に使われるすべてのオプション名は、他のオプション名参照と同様に、 <a class="reference internal" href="#configparser.optionxform" title="configparser.optionxform"><code class="xref py py-meth docutils literal"><span class="pre">optionxform()</span></code></a> メソッドを通して渡されます。例えば、 <a class="reference internal" href="#configparser.optionxform" title="configparser.optionxform"><code class="xref py py-meth docutils literal"><span class="pre">optionxform()</span></code></a> のデフォルトの実装を使うと、値 <code class="docutils literal"><span class="pre">foo</span> <span class="pre">%(bar)s</span></code> と <code class="docutils literal"><span class="pre">foo</span> <span class="pre">%(BAR)s</span></code> は等しくなります。</p>
<p><em>converters</em> が与えられた場合、各キーが型コンバーターの名前を表し、各値が文字列から目的のデータ型への変換を実装する呼び出し可能オブジェクトです。各コンバーターは、自身の対応する <code class="xref py py-meth docutils literal"><span class="pre">get*()</span></code> メソッドをパーサーオブジェクトとセクションプロキシで取得します。</p>
<div class="versionchanged">
<p><span class="versionmodified">バージョン 3.1 で変更: </span>デフォルトの <em>dict_type</em> は <a class="reference internal" href="collections.html#collections.OrderedDict" title="collections.OrderedDict"><code class="xref py py-class docutils literal"><span class="pre">collections.OrderedDict</span></code></a> です。</p>
</div>
<div class="versionchanged">
<p><span class="versionmodified">バージョン 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> および <em>interpolation</em> が追加されました。</p>
</div>
<div class="versionchanged">
<p><span class="versionmodified">バージョン 3.5 で変更: </span><em>converters</em> 引数が追加されました。</p>
</div>
<dl class="method">
<dt id="configparser.ConfigParser.defaults">
<code class="descname">defaults</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.defaults" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>インスタンス全体で使われるデフォルト値の辞書を返します。</p>
</dd></dl>
<dl class="method">
<dt id="configparser.ConfigParser.sections">
<code class="descname">sections</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.sections" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>利用できるセクションのリストを返します。<em>default section</em> はリストに含まれません。</p>
</dd></dl>
<dl class="method">
<dt id="configparser.ConfigParser.add_section">
<code class="descname">add_section</code><span class="sig-paren">(</span><em>section</em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.add_section" title="この定義へのパーマリンク">¶</a></dt>
<dd><p><em>section</em> という名のセクションをインスタンスに追加します。与えられた名前のセクション名がすでに存在したら、 <a class="reference internal" href="#configparser.DuplicateSectionError" title="configparser.DuplicateSectionError"><code class="xref py py-exc docutils literal"><span class="pre">DuplicateSectionError</span></code></a> が送出されます。 <em>default section</em> 名が渡されたら、 <a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a> が送出されます。セクションの名前は文字列でなければなりません。そうでなければ、 <a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a> が送出されます。</p>
<div class="versionchanged">
<p><span class="versionmodified">バージョン 3.2 で変更: </span>文字列でないセクション名は <a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a> を送出します。</p>
</div>
</dd></dl>
<dl class="method">
<dt id="configparser.ConfigParser.has_section">
<code class="descname">has_section</code><span class="sig-paren">(</span><em>section</em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.has_section" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>指名された <em>section</em> が設定中に存在するかを示します。<em>default section</em> は認識されません。</p>
</dd></dl>
<dl class="method">
<dt id="configparser.ConfigParser.options">
<code class="descname">options</code><span class="sig-paren">(</span><em>section</em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.options" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>指定された <em>section</em> 中で利用できるオプションのリストを返します。</p>
</dd></dl>
<dl class="method">
<dt id="configparser.ConfigParser.has_option">
<code class="descname">has_option</code><span class="sig-paren">(</span><em>section</em>, <em>option</em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.has_option" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>与えられた <em>section</em> が存在し、与えられた <em>option</em> を含む場合、 <a class="reference internal" href="constants.html#True" title="True"><code class="xref py py-const docutils literal"><span class="pre">True</span></code></a> を返します。それ以外の場合には、 <a class="reference internal" href="constants.html#False" title="False"><code class="xref py py-const docutils literal"><span class="pre">False</span></code></a> を返します。指定された <em>section</em> が <a class="reference internal" href="constants.html#None" title="None"><code class="xref py py-const docutils literal"><span class="pre">None</span></code></a> または空文字列の場合、 DEFAULT が仮定されます。</p>
</dd></dl>
<dl class="method">
<dt id="configparser.ConfigParser.read">
<code class="descname">read</code><span class="sig-paren">(</span><em>filenames</em>, <em>encoding=None</em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.read" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>ファイル名のリストを読み込んでパースしようと試みます。正常にパースできたファイル名のリストを返します。</p>
<p>もし <em>filenames</em> が文字列か <a class="reference internal" href="../glossary.html#term-path-like-object"><span class="xref std std-term">path-like object</span></a> なら、この引数は1つのファイル名として扱われます。 <em>filenames</em> 中に開けないファイルがある場合、そのファイルは無視されます。この挙動は、設定ファイルが置かれる可能性のある場所(例えば、 カレントディレクトリ、ホームディレクトリ、システム全体の設定を行うディレクトリ)のリストを指定して、リストの中で存在する全ての設定ファイルを読むことを想定して設計されています。</p>
<p>どの設定ファイルも存在しなかった場合、 <a class="reference internal" href="#configparser.ConfigParser" title="configparser.ConfigParser"><code class="xref py py-class docutils literal"><span class="pre">ConfigParser</span></code></a> のインスタンスは 空のデータセットを持ちます。初期値の設定ファイルを先に読み込んでおく必要があるアプリケーションでは、 オプションのファイルを読み込むために <a class="reference internal" href="#configparser.ConfigParser.read" title="configparser.ConfigParser.read"><code class="xref py py-meth docutils literal"><span class="pre">read()</span></code></a> を呼ぶ前に 、まず <a class="reference internal" href="#configparser.ConfigParser.read_file" title="configparser.ConfigParser.read_file"><code class="xref py py-meth docutils literal"><span class="pre">read_file()</span></code></a> を用いて必要なファイルを読み込んでください:</p>
<div class="highlight-python3"><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="versionadded">
<p><span class="versionmodified">バージョン 3.2 で追加: </span><em>encoding</em> 引数。以前は、すべてのファイルが <a class="reference internal" href="functions.html#open" title="open"><code class="xref py py-func docutils literal"><span class="pre">open()</span></code></a> のデフォルトエンコーディングを使って読まれていました。</p>
</div>
<div class="versionadded">
<p><span class="versionmodified">バージョン 3.6.1 で追加: </span><em>filenames</em> 引数が <a class="reference internal" href="../glossary.html#term-path-like-object"><span class="xref std std-term">path-like object</span></a> を受け入れるようになりました。</p>
</div>
</dd></dl>
<dl class="method">
<dt id="configparser.ConfigParser.read_file">
<code class="descname">read_file</code><span class="sig-paren">(</span><em>f</em>, <em>source=None</em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.read_file" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>設定データを <em>f</em> から読み込んで解析します。<em>f</em> は Unicode 文字列を yield するイテラブル (例えばテキストモードで開かれたファイル) です。</p>
<p>オプションの引数 <em>source</em> は読み込まれるファイルの名前を指定します。与えられず、 <em>f</em> に <code class="xref py py-attr docutils literal"><span class="pre">name</span></code> 属性があれば、それが <em>source</em> として使われます。デフォルトは <code class="docutils literal"><span class="pre">'<???>'</span></code> です。</p>
<div class="versionadded">
<p><span class="versionmodified">バージョン 3.2 で追加: </span><a class="reference internal" href="#configparser.ConfigParser.readfp" title="configparser.ConfigParser.readfp"><code class="xref py py-meth docutils literal"><span class="pre">readfp()</span></code></a> を置き換えます。</p>
</div>
</dd></dl>
<dl class="method">
<dt id="configparser.ConfigParser.read_string">
<code class="descname">read_string</code><span class="sig-paren">(</span><em>string</em>, <em>source='<string>'</em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.read_string" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>設定データを文字列から解析します。</p>
<p>オプションの引数 <em>source</em> はコンテキストにおける渡された文字列の名前を指定します。与えられなければ、<code class="docutils literal"><span class="pre">'<string>'</span></code> が使われます。これは一般にファイルシステムパスや URL にします。</p>
<div class="versionadded">
<p><span class="versionmodified">バージョン 3.2 で追加.</span></p>
</div>
</dd></dl>
<dl class="method">
<dt id="configparser.ConfigParser.read_dict">
<code class="descname">read_dict</code><span class="sig-paren">(</span><em>dictionary</em>, <em>source='<dict>'</em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.read_dict" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>辞書的な <code class="docutils literal"><span class="pre">items()</span></code> メソッドを提供する任意のオブジェクトから設定を読み込みます。キーはセクション名で、値はそのセクションに現れるキーと値をもつ辞書です。使われた辞書型が順序を保存するなら、セクションおよびそのキーは順に加えられます。値は自動で文字列に変換されます。</p>
<p>オプションの引数 <em>source</em> はコンテキストにおける渡された辞書の名前を指定します。与えられなければ、<code class="docutils literal"><span class="pre"><dict></span></code> が使われます。</p>
<p>このメソッドを使ってパーサー間で状態をコピーできます。</p>
<div class="versionadded">
<p><span class="versionmodified">バージョン 3.2 で追加.</span></p>
</div>
</dd></dl>
<dl class="method">
<dt id="configparser.ConfigParser.get">
<code class="descname">get</code><span class="sig-paren">(</span><em>section</em>, <em>option</em>, <em>*</em>, <em>raw=False</em>, <em>vars=None</em><span class="optional">[</span>, <em>fallback</em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.get" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>指名された <em>section</em> の <em>option</em> の値を取得します。<em>vars</em> が提供されるなら、それは辞書でなければならず、(与えられたなら) <em>vars</em>, <em>section</em>, <em>DEFAULTSECT</em> 内からこの順で <em>option</em> が探索されます。<em>fallback</em> の値として <code class="docutils literal"><span class="pre">None</span></code> を与えられます。</p>
<p><em>raw</em> が真でない時には、全ての <code class="docutils literal"><span class="pre">'%'</span></code> 置換は展開されてから返されます。置換後の値はオプションと同じ順序で探されます。</p>
<div class="versionchanged">
<p><span class="versionmodified">バージョン 3.2 で変更: </span>引数 <em>raw</em>, <em>vars</em> および <em>fallback</em> は、(特にマッピングプロトコルを使用するときに) ユーザーが第 3 引数を <em>fallback</em> フォールバックとして使おうとしないように、キーワード専用となりました。</p>
</div>
</dd></dl>
<dl class="method">
<dt id="configparser.ConfigParser.getint">
<code class="descname">getint</code><span class="sig-paren">(</span><em>section</em>, <em>option</em>, <em>*</em>, <em>raw=False</em>, <em>vars=None</em><span class="optional">[</span>, <em>fallback</em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.getint" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>指定された <em>section</em> 中の <em>option</em> を整数に型強制する補助メソッドです。 <em>raw</em>, <em>vars</em> および <em>fallback</em> の説明は <a class="reference internal" href="#configparser.ConfigParser.get" title="configparser.ConfigParser.get"><code class="xref py py-meth docutils literal"><span class="pre">get()</span></code></a> を参照してください。</p>
</dd></dl>
<dl class="method">
<dt id="configparser.ConfigParser.getfloat">
<code class="descname">getfloat</code><span class="sig-paren">(</span><em>section</em>, <em>option</em>, <em>*</em>, <em>raw=False</em>, <em>vars=None</em><span class="optional">[</span>, <em>fallback</em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.getfloat" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>指定された <em>section</em> 中の <em>option</em> を浮動小数点数に型強制する補助メソッドです。 <em>raw</em>, <em>vars</em> および <em>fallback</em> の説明は <a class="reference internal" href="#configparser.ConfigParser.get" title="configparser.ConfigParser.get"><code class="xref py py-meth docutils literal"><span class="pre">get()</span></code></a> を参照してください。</p>
</dd></dl>
<dl class="method">
<dt id="configparser.ConfigParser.getboolean">
<code class="descname">getboolean</code><span class="sig-paren">(</span><em>section</em>, <em>option</em>, <em>*</em>, <em>raw=False</em>, <em>vars=None</em><span class="optional">[</span>, <em>fallback</em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.getboolean" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>指定された <em>section</em> 中の <em>option</em> をブール値に型強制する補助メソッドです。なお、このオプションで受け付けられる値はこのメソッドが <code class="docutils literal"><span class="pre">True</span></code> を返す <code class="docutils literal"><span class="pre">'1'</span></code>, <code class="docutils literal"><span class="pre">'yes'</span></code>, <code class="docutils literal"><span class="pre">'true'</span></code>, および <code class="docutils literal"><span class="pre">'on'</span></code>,と、このメソッドが <code class="docutils literal"><span class="pre">False</span></code> を返す <code class="docutils literal"><span class="pre">'0'</span></code>, <code class="docutils literal"><span class="pre">'no'</span></code>, <code class="docutils literal"><span class="pre">'false'</span></code>, and <code class="docutils literal"><span class="pre">'off'</span></code> です。その他のいかなる値も <a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a> を送出します。 <em>raw</em>, <em>vars</em> および <em>fallback</em> の説明は <a class="reference internal" href="#configparser.ConfigParser.get" title="configparser.ConfigParser.get"><code class="xref py py-meth docutils literal"><span class="pre">get()</span></code></a> を参照してください。</p>
</dd></dl>
<dl class="method">
<dt id="configparser.ConfigParser.items">
<code class="descname">items</code><span class="sig-paren">(</span><em>raw=False</em>, <em>vars=None</em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.items" title="この定義へのパーマリンク">¶</a></dt>
<dt>
<code class="descname">items</code><span class="sig-paren">(</span><em>section</em>, <em>raw=False</em>, <em>vars=None</em><span class="sig-paren">)</span></dt>
<dd><p><em>section</em> が与えられなければ、DEFAULTSECT を含めた <em>section_name</em>, <em>section_proxy</em> の対のリストを返します。</p>
<p>与えられれば、与えられた <em>section</em> 中のオプションの <em>name</em>, <em>value</em> の対のリストを返します。オプションの引数は <a class="reference internal" href="#configparser.ConfigParser.get" title="configparser.ConfigParser.get"><code class="xref py py-meth docutils literal"><span class="pre">get()</span></code></a> メソッドに与えるものと同じ意味を持ちます。</p>
<div class="versionchanged">
<p><span class="versionmodified">バージョン 3.2 で変更: </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="method">
<dt id="configparser.ConfigParser.set">
<code class="descname">set</code><span class="sig-paren">(</span><em>section</em>, <em>option</em>, <em>value</em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.set" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>与えられたセクションが存在すれば、与えられたオプションを指定された値に設定します。そうでなければ <a class="reference internal" href="#configparser.NoSectionError" title="configparser.NoSectionError"><code class="xref py py-exc docutils literal"><span class="pre">NoSectionError</span></code></a> を送出します。 <em>option</em> および <em>value</em> は文字列でなければなりません。そうでなければ <a class="reference internal" href="exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal"><span class="pre">TypeError</span></code></a> が送出されます。</p>
</dd></dl>
<dl class="method">
<dt id="configparser.ConfigParser.write">
<code class="descname">write</code><span class="sig-paren">(</span><em>fileobject</em>, <em>space_around_delimiters=True</em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.write" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>設定の表現を指定された <a class="reference internal" href="../glossary.html#term-file-object"><span class="xref std std-term">file object</span></a> に書き込みます。 <em>fileobject</em> は (文字列を受け付ける) テキストモードで開かれていなければなりません。この表現は後で <a class="reference internal" href="#configparser.ConfigParser.read" title="configparser.ConfigParser.read"><code class="xref py py-meth docutils literal"><span class="pre">read()</span></code></a> を呼び出すことでパースできます。 <em>space_around_delimiters</em> が真なら、キーと値の間のデリミタはスペースで囲まれます。</p>
</dd></dl>
<dl class="method">
<dt id="configparser.ConfigParser.remove_option">
<code class="descname">remove_option</code><span class="sig-paren">(</span><em>section</em>, <em>option</em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.remove_option" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>指定された <em>option</em> を指定された <em>section</em> から削除します。セクションが存在しなければ、 <a class="reference internal" href="#configparser.NoSectionError" title="configparser.NoSectionError"><code class="xref py py-exc docutils literal"><span class="pre">NoSectionError</span></code></a> を送出します。オプションが存在して削除されれば、 <a class="reference internal" href="constants.html#True" title="True"><code class="xref py py-const docutils literal"><span class="pre">True</span></code></a> を返します。そうでなければ <a class="reference internal" href="constants.html#False" title="False"><code class="xref py py-const docutils literal"><span class="pre">False</span></code></a> を返します。</p>
</dd></dl>
<dl class="method">
<dt id="configparser.ConfigParser.remove_section">
<code class="descname">remove_section</code><span class="sig-paren">(</span><em>section</em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.remove_section" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>指定された <em>section</em> を設定から削除します。セクションが実際に存在すれば、<code class="docutils literal"><span class="pre">True</span></code> を返します。そうでなければ <code class="docutils literal"><span class="pre">False</span></code> を返します。</p>
</dd></dl>
<dl class="method">
<dt id="configparser.ConfigParser.optionxform">
<code class="descname">optionxform</code><span class="sig-paren">(</span><em>option</em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.optionxform" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>入力ファイルに現れた、またはクライアントコードで渡されたオプション名 <em>option</em> を内部構造で実際に使われる形式に変換します。デフォルトの実装では <em>option</em> の小文字版を返します。派生クラスでこれを上書きするか、クライアントコードでインスタンス上のこの名前の属性を設定して、この動作に影響を与えることができます。</p>
<p>このメソッドを使うためにパーサーを派生クラス化させる必要はなく、インスタンス上で、これを文字列引数をとって文字列を返す関数に設定できます。例えば、これを <code class="docutils literal"><span class="pre">str</span></code> に設定すると、オプション名に大文字小文字の区別をつけられます:</p>
<div class="highlight-python3"><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>なお、設定ファイルを読み込むとき、オプション名の周りの空白は <a class="reference internal" href="#configparser.optionxform" title="configparser.optionxform"><code class="xref py py-meth docutils literal"><span class="pre">optionxform()</span></code></a> が呼び出される前に取り除かれます。</p>
</dd></dl>
<dl class="method">
<dt id="configparser.ConfigParser.readfp">
<code class="descname">readfp</code><span class="sig-paren">(</span><em>fp</em>, <em>filename=None</em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.ConfigParser.readfp" title="この定義へのパーマリンク">¶</a></dt>
<dd><div class="deprecated">
<p><span class="versionmodified">バージョン 3.2 で撤廃: </span>代わりに <a class="reference internal" href="#configparser.ConfigParser.read_file" title="configparser.ConfigParser.read_file"><code class="xref py py-meth docutils literal"><span class="pre">read_file()</span></code></a> を使ってください。</p>
</div>
<div class="versionchanged">
<p><span class="versionmodified">バージョン 3.2 で変更: </span><a class="reference internal" href="#configparser.ConfigParser.readfp" title="configparser.ConfigParser.readfp"><code class="xref py py-meth docutils literal"><span class="pre">readfp()</span></code></a> は <code class="docutils literal"><span class="pre">fp.readline()</span></code> を呼び出す代わりに <em>fp</em> をイテレートするようになりました。</p>
</div>
<p><a class="reference internal" href="#configparser.ConfigParser.readfp" title="configparser.ConfigParser.readfp"><code class="xref py py-meth docutils literal"><span class="pre">readfp()</span></code></a> をイテレーションをサポートしない引数で呼び出す既存のコードには、ファイル的なオブジェクトまわりのラッパーとして以下のジェネレーターが使えます:</p>
<div class="highlight-python3"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">readline_generator</span><span class="p">(</span><span class="n">fp</span><span class="p">):</span>
<span class="n">line</span> <span class="o">=</span> <span class="n">fp</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span>
<span class="k">while</span> <span class="n">line</span><span class="p">:</span>
<span class="k">yield</span> <span class="n">line</span>
<span class="n">line</span> <span class="o">=</span> <span class="n">fp</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span>
</pre></div>
</div>
<p><code class="docutils literal"><span class="pre">parser.readfp(fp)</span></code> の代わりに <code class="docutils literal"><span class="pre">parser.read_file(readline_generator(fp))</span></code> を使ってください。</p>
</dd></dl>
</dd></dl>
<dl class="data">
<dt id="configparser.MAX_INTERPOLATION_DEPTH">
<code class="descclassname">configparser.</code><code class="descname">MAX_INTERPOLATION_DEPTH</code><a class="headerlink" href="#configparser.MAX_INTERPOLATION_DEPTH" title="この定義へのパーマリンク">¶</a></dt>
<dd><p><code class="xref py py-meth docutils literal"><span class="pre">get()</span></code> の <em>raw</em> が偽であるときの再帰的な補間の最大の深さです。これはデフォルトの <em>interpolation</em> を使うときのみ関係します。</p>
</dd></dl>
</div>
<div class="section" id="rawconfigparser-objects">
<span id="id13"></span><h2>14.2.10. RawConfigParser オブジェクト<a class="headerlink" href="#rawconfigparser-objects" title="このヘッドラインへのパーマリンク">¶</a></h2>
<dl class="class">
<dt id="configparser.RawConfigParser">
<em class="property">class </em><code class="descclassname">configparser.</code><code class="descname">RawConfigParser</code><span class="sig-paren">(</span><em>defaults=None</em>, <em>dict_type=collections.OrderedDict</em>, <em>allow_no_value=False</em>, <em>*</em>, <em>delimiters=('='</em>, <em>':')</em>, <em>comment_prefixes=('#'</em>, <em>';')</em>, <em>inline_comment_prefixes=None</em>, <em>strict=True</em>, <em>empty_lines_in_values=True</em>, <em>default_section=configparser.DEFAULTSECT</em><span class="optional">[</span>, <em>interpolation</em><span class="optional">]</span><span class="sig-paren">)</span><a class="headerlink" href="#configparser.RawConfigParser" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>補間や不安全 な <code class="docutils literal"><span class="pre">add_section</span></code> および <code class="docutils literal"><span class="pre">set</span></code> メソッドがデフォルトで無効化されている、レガシーな <a class="reference internal" href="#configparser.ConfigParser" title="configparser.ConfigParser"><code class="xref py py-class docutils literal"><span class="pre">ConfigParser</span></code></a> の別型です。</p>
<div class="admonition note">
<p class="first admonition-title">注釈</p>
<p class="last">代わりに内部に保存する値の型を検査する <a class="reference internal" href="#configparser.ConfigParser" title="configparser.ConfigParser"><code class="xref py py-class docutils literal"><span class="pre">ConfigParser</span></code></a> を使うことを検討してください。補間を望まない場合、 <code class="docutils literal"><span class="pre">ConfigParser(interpolation=None)</span></code> を使用できます。</p>
</div>
<dl class="method">
<dt id="configparser.RawConfigParser.add_section">
<code class="descname">add_section</code><span class="sig-paren">(</span><em>section</em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.RawConfigParser.add_section" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>インスタンスに <em>section</em> という名のセクションを追加します。与えられた名前のセクションがすでに存在すれば、 <a class="reference internal" href="#configparser.DuplicateSectionError" title="configparser.DuplicateSectionError"><code class="xref py py-exc docutils literal"><span class="pre">DuplicateSectionError</span></code></a> が送出されます。 <em>default section</em> 名が渡されると、 <a class="reference internal" href="exceptions.html#ValueError" title="ValueError"><code class="xref py py-exc docutils literal"><span class="pre">ValueError</span></code></a> が送出されます。</p>
<p><em>section</em> の型は検査されないため、ユーザーは非文字列の名前付きセクションを作ることができます。この振る舞いはサポートされておらず、内部エラーを起こす可能性があります。</p>
</dd></dl>
<dl class="method">
<dt id="configparser.RawConfigParser.set">
<code class="descname">set</code><span class="sig-paren">(</span><em>section</em>, <em>option</em>, <em>value</em><span class="sig-paren">)</span><a class="headerlink" href="#configparser.RawConfigParser.set" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>与えられたセクションが存在していれば、オプションを指定された値に設定します。セクションが存在しなければ <a class="reference internal" href="#configparser.NoSectionError" title="configparser.NoSectionError"><code class="xref py py-exc docutils literal"><span class="pre">NoSectionError</span></code></a> を発生させます。 <a class="reference internal" href="#configparser.RawConfigParser" title="configparser.RawConfigParser"><code class="xref py py-class docutils literal"><span class="pre">RawConfigParser</span></code></a> (あるいは <em>raw</em> パラメータをセットした <a class="reference internal" href="#configparser.ConfigParser" title="configparser.ConfigParser"><code class="xref py py-class docutils literal"><span class="pre">ConfigParser</span></code></a>) を文字列型でない値の <em>内部的な</em> 格納場所として使うことは可能ですが、すべての機能 (置換やファイルへの出力を含む) がサポートされるのは文字列を値として使った場合だけです。</p>
<p>ユーザーは、このメソッドを使って非文字列の値をキーに代入できます。この振る舞いはサポートされておらず、非rawモードでの値の取得や、ファイルへの書き出しを試みた際にエラーの原因となりえます。このような代入を許さない <strong>マッピングプロトコルAPIを使用してください</strong>。</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="exceptions">
<h2>14.2.11. 例外<a class="headerlink" href="#exceptions" title="このヘッドラインへのパーマリンク">¶</a></h2>
<dl class="exception">
<dt id="configparser.Error">
<em class="property">exception </em><code class="descclassname">configparser.</code><code class="descname">Error</code><a class="headerlink" href="#configparser.Error" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>他の全ての <a class="reference internal" href="#module-configparser" title="configparser: Configuration file parser."><code class="xref py py-mod docutils literal"><span class="pre">configparser</span></code></a> 例外の基底クラスです。</p>
</dd></dl>
<dl class="exception">
<dt id="configparser.NoSectionError">
<em class="property">exception </em><code class="descclassname">configparser.</code><code class="descname">NoSectionError</code><a class="headerlink" href="#configparser.NoSectionError" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>指定したセクションが見つからなかった時に起きる例外です。</p>
</dd></dl>
<dl class="exception">
<dt id="configparser.DuplicateSectionError">
<em class="property">exception </em><code class="descclassname">configparser.</code><code class="descname">DuplicateSectionError</code><a class="headerlink" href="#configparser.DuplicateSectionError" title="この定義へのパーマリンク">¶</a></dt>
<dd><p><code class="xref py py-meth docutils literal"><span class="pre">add_section()</span></code> がすでに存在するセクションの名前で呼び出された場合や、strict なパーサーで単一の入力ファイル、文字列、辞書中に同じセクションが複数回現れたときに送出される例外です。</p>
<div class="versionadded">
<p><span class="versionmodified">バージョン 3.2 で追加: </span>オプションの <code class="docutils literal"><span class="pre">source</span></code> と <code class="docutils literal"><span class="pre">lineno</span></code> が属性および <a class="reference internal" href="../reference/datamodel.html#object.__init__" title="object.__init__"><code class="xref py py-meth docutils literal"><span class="pre">__init__()</span></code></a> への引数として加えられました。</p>
</div>
</dd></dl>
<dl class="exception">
<dt id="configparser.DuplicateOptionError">
<em class="property">exception </em><code class="descclassname">configparser.</code><code class="descname">DuplicateOptionError</code><a class="headerlink" href="#configparser.DuplicateOptionError" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>strict なパーサーで、単一の入力ファイル、文字列、辞書中に同じオプションが複数回現れたときに送出される例外です。これはミススペルや大文字小文字の区別に関係するエラー、例えば辞書の二つのキーが同じ大文字小文字の区別のない設定キーを表すこと、を捕捉します。</p>
</dd></dl>
<dl class="exception">
<dt id="configparser.NoOptionError">
<em class="property">exception </em><code class="descclassname">configparser.</code><code class="descname">NoOptionError</code><a class="headerlink" href="#configparser.NoOptionError" title="この定義へのパーマリンク">¶</a></dt>
<dd><p>指定されたオプションが指定されたセクションに見つからないときに送出される例外です。</p>
</dd></dl>