42

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

私が持っている場合:

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で可能ですか?また、プログラムを可能な限り「ストック」に保つ必要があるため、別のモジュールを試したくありません。

4

5 に答える 5

36

バージョンが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
于 2013-10-17T16:20:29.277 に答える
9

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:大文字と小文字を変更しない場合(デフォルトでは、すべてのオプションと値のペアが小文字に変換されます)

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

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

于 2018-09-07T07:43:23.227 に答える
5

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

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')]
于 2011-07-08T06:53:09.323 に答える
5

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)
于 2018-07-07T12:16:02.900 に答える
0

上記の気紛れな解決策:) 副作用があることに注意 してください、それがあなたに合っているかどうかを確認してください

config = configparser.ConfigParser(comment_prefixes='///')
config.set('section', '# cmt', 'comment goes here')

configparseはコメントを変数として扱いますが、実際のソフトウェアは扱いません。これにより、同じiniファイルの読み取り後に行われた書き込みに関するコメントも保持されます。これは実際のゲームチェンジャーです(コメントが消えるのはひどいです):)allow_no_value=True空の値を許可するために行う必要はなく、ほんのわずかな視覚的なキャンディーです: )。

したがって、iniファイルは次のようになります。

[section]
# cmt = comment goes here

これでほとんど作業が完了します:)comment_prefixes万が一の場合に備えて、iniファイルに表示されない文字列で初期化してください。

これは3.9でうまくいきました。

既存のコメントを書くことへの副作用。それらは通常のデフォルトで消えることはありませんが、同様の形式に変換されます# first = <remaining>。ここで、-firstコメントの最初の単語remaining-コメントの残りの部分は、ファイルの外観を変更するため、注意してください...

于 2021-05-30T09:23:37.667 に答える