2

オプションが # で始まるため、構成ファイルの使用に問題があります。したがって、python はそれをコメントとして扱います (本来あるべきように)。

機能していない構成ファイルの部分:

[channels]
#channel

ご覧のとおり、これは IRC チャネルであるため、# が必要です。これで、# が必要になるたびに # を追加する醜い方法を使用できますが、クリーンなままにしておくことをお勧めします。

それで、これを無視する方法はありますか?オプションを印刷するとき、それはで始まるように

4

4 に答える 4

2

Pythonファイルで設定すると、#を\でエスケープできます

それ以外の場合は、 # をコメント行として扱わない他の構文の構成ファイルにある必要があると思います

于 2013-02-27T22:39:39.120 に答える
1

おそらく使用してConfigParserいます-ところで言及する必要があります-ConfigParserはコメント部分を無視するため、パーサーにフィードする前にconfigfileを前処理/後処理する必要があります。

私は2つの方法を考えることができます。どちらもConfigParserクラスのreadメソッドの代わりにreadfpを使用します。1)コーデックモジュールのサブクラスStreamWriterとStreamReaderを使用して、オープニングプロセスを透過的な再コーディング。2)次のようなモジュールStringIOから使用します。io

from io import StringIO
...
s = configfile.read()
s.replace("#","_")
f = StringIO(unicode(s))
configparser.readfp(f)

また、「ini」ファイルの構文を使用する必要がない場合は、jsonモジュールを確認してください。特にconfig-filesを単純なユーザーが手動で編集する必要がない場合は、構成用のini-fileよりも頻繁に使用します。

my_config={
  "channels":["#mychannel", "#yourchannel"],
  "user"="bob",
  "buddy-list":["alice","eve"],
  }

import json
with open(configfile, 'rw') as cfg:
  cfg.write(json.dumps(my_config))
于 2013-02-27T22:47:21.037 に答える
0

ConfigParserには、「#」で始まる行を無視しない方法はありません。

ConfigParser.py、行476:

        # comment or blank line?
        if line.strip() == '' or line[0] in '#;':
            continue

それをオフにする方法はありません。

于 2013-02-27T22:46:30.090 に答える
0

あなたの防御では、ConfigParser はあなたにこの間違いをさせています:

import sys
import ConfigParser

config = ConfigParser.RawConfigParser()
config.add_section('channels')
config.set('channels', '#channel', 'true')

config.write(sys.stdout)

次の出力が生成されます。

[channels]
#channel = true

#ただし、次のように始まるセクション名を付けることができます。

import sys
import ConfigParser

config = ConfigParser.RawConfigParser()
config.add_section('#channels')
config.set('#channels', 'channel', 'true')

config.write(sys.stdout)

with open('q15123871.cfg', 'wb') as configfile:
    config.write(configfile)

config = ConfigParser.RawConfigParser()
config.read('q15123871.cfg')
print config.get('#channels', 'channel')

次の出力が生成されます。

[#channels]
channel = true

true
于 2013-02-27T23:28:31.753 に答える