2011-07-08 18 views
22

セクション内の特定のファイルにコメントを書き込むにはどうすればよいですか?ConfigParserを使用してファイルにコメントを書き込む

私が持っている場合:

[DEFAULT] 
test = 1 

しかし、どのように私はのように、[DEFAULT]セクション内のコメントを使用してファイルを取得することができます::

[DEFAULT] 
; test comment 
test = 1 

import ConfigParser 
with open('./config.ini', 'w') as f: 
    conf = ConfigParser.ConfigParser() 
    conf.set('DEFAULT', 'test', 1) 
    conf.write(f) 

を、私は、ファイルを取得します私は次のようにしてファイルにコードを書くことができることを知っています:

import ConfigParser 
with open('./config.ini', 'w') as f: 
    conf = ConfigParser.ConfigParser() 
    conf.set('DEFAULT', 'test', 1) 
    conf.write(f) 
    f.write('; test comment') # but this gets printed after the section key-value pairs 

これはConfigParserで可能でしょうか?プログラムをできるだけ「在庫」にしておく必要があるので、私は別のモジュールを試してみたくなりません。

+0

を、私は古い標準のファイルを使用して、私のファイルを書くことにしましたインタフェース 'f = open( 'test.ini'、 'w'); ConfigParserモジュールは辞書を使用しているので、ある例では書き込みが何らかの順序で行われていると言われていますが、事前定義された順序で書いていないので、f.write( 'blabla')です。[python docs] (http://docs.python.org/library/configparser.html#examples)) – razvanc

+0

もしあなたがまだ周りにいるなら、私はこれに関する短い答えを書いてそれを受け入れたものとしてマークすることを提案します。私はこのコメントの後でも提案された答えを読んで、同じ結論に達しました...しかし私はしばらくの間、あなたの選択した解決策を投票しました... – estani

答えて

19

を与えていますオプションがある場合はV ERSION> = 2.7

このコード:

import ConfigParser 

config = ConfigParser.ConfigParser(allow_no_value=True) 
config.add_section('default_settings') 
config.set('default_settings', '; comment here') 
config.set('default_settings', 'test', 1) 
with open('config.ini', 'w') as fp: 
    config.write(fp) 


config = ConfigParser.ConfigParser(allow_no_value=True) 
config.read('config.ini') 
print config.items('default_settings') 

は、このようなiniファイルを作成します:コンフィギュレーションファイルを書き込むためのConfigParserを検討した後

+0

「DEFAULT」セクションにコメントを書き込もうとしていない限り、この機能は動作します。書き込みを行わないように書き込み機能に「= None」を書くチェックがありますが、 「DEFAULT」セクションを抜けてください。 –

+0

良い点。幸いにも、Python 3.6では、 'configparser'モジュールはこの奇妙な動作をしません。したがって、 'config = configparser。ConfigParser({"; comment":None}、allow_no_value = True) 'は、' = None'の後ろにコメントを挿入します。出力の正しい順序付けを保証するために、(私の例のように 'dict'ではなく)' collections.OrderedDict'が必要です。 – EOL

+0

このオプションは、新しいファイルを作成している場合にのみ機能します。セクションのコメントを含む前のファイルを編集している場合、それらはすべて消去されます:/ – GEPD

3

#または;で始まる変数を作成できます。キャラクター:

conf.set('default_settings', '; comment here', '') 
conf.set('default_settings', 'test', 1) 

作成したconfファイルは

[default_settings] 
    ; comment here = 
    test = 1 

ConfigParser.read機能が第1の値を解析しません

config = ConfigParser.ConfigParser() 
config.read('config.ini') 
print config.items('default_settings') 

あなたがallow_no_valueを使用することができます
[('test','1')] 
+1

かなり醜い '='が残っています。 – ThiefMaster

+0

おそらく、これはConfigParserでもっとも唯一の方法です。ありがとう – razvanc

+0

'='の末尾を取り除くことができます。コメントを書く場合は、 'set'メソッドを呼び出すときに3番目の引数を省略するだけです。それ以外の場合は、不要な末尾の '='になる空文字列を割り当てます。 – benregn

関連する問題