web-dev-qa-db-ja.com

ConfigParserを使用してファイルにコメントを書き込む

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

私が持っている場合:

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

ファイルを取得します。

[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)
    f.write('; test comment') # but this gets printed after the section key-value pairs

これはConfigParserで可能ですか?また、プログラムをできるだけ「ストック」に保つ必要があるため、別のモジュールを試したくありません。

34
razvanc

バージョンが2.7以上の場合は、allow_no_valueオプションを使用できます

このスニペット:

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ファイルを作成します:

[default_settings]
; comment here
test = 1
27

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

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

作成されたconfファイルは

    [default_settings]
    ; comment here = 
    test = 1

ConfigParser.read関数は最初の値を解析しません

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

与える

[('test','1')]
5

3.7の更新

私は最近configparserを扱っていて、この投稿に出くわしました。 3.7に関連する情報で更新します。

例1:

config = configparser.ConfigParser(allow_no_value=True)
config.set('SECTION', '; This is a comment.', None)

例2:

config = configparser.ConfigParser(allow_no_value=True)
config['SECTION'] = {'; This is a comment':None, 'Option':'Value')

例3:大文字小文字を変更しない場合(デフォルトでは、すべてのoption:valueペアを小文字に変換します)

config = configparser.ConfigParser(allow_no_value=True)
config.optionxform = str
config.set('SECTION', '; This Comment Will Keep Its Original Case', None)

ここで、「SECTION」はコメントを追加するセクション名で、大文字と小文字が区別されます。空の文字列( '')の代わりに「なし」(引用符なし)を使用すると、末尾に「=」を残さずにコメントを設定できます。

4
dsanchez

ConfigUpdater を使用することもできます。最小限の侵襲的な方法で構成ファイルを更新するためのより多くの便利なオプションがあります。

あなたは基本的にそうするでしょう:

from configupdater import ConfigUpdater

updater = ConfigUpdater()
updater.add_section('DEFAULT')
updater.set('DEFAULT', 'test', 1)
updater['DEFAULT']['test'].add_before.comment('test comment', comment_prefix=';')
with open('./config.ini', 'w') as f:
    updater.write(f)
2
fwilhelm