12

次を使用した構成ファイルがありますconfigParser

<br>
[ section one ]<br>
one = Y,Z,X <br><br>
[EG 2]<br>
ias = X,Y,Z<br>

私のプログラムは、これらの値の読み取りと処理に問題なく動作します。

ただし、一部のセクションは非常に大きくなります。次のように、値を改行できる構成ファイルが必要です。

[EG SECTION]<br>
EG=<br>
item 1 <br>
item 2 <br>
item 3<br>
etc...

私のコードでは、string.split()明らかにコンマに設定されている値を使用して、値の区切り記号 (または区切り記号) を取る単純な関数があります。\n動作しないエスケープ文字列を試しました。

これがPythonの構成パーサーで可能かどうかは誰にもわかりませんか?
http://docs.python.org/library/configparser.html

# We need to extract data from the config 
def getFromConfig(currentTeam, section, value, delimeter):
    cp = ConfigParser.ConfigParser()
    fileName = getFileName(currentTeam)
    cp.read(fileName)
    try:
        returnedString = cp.get(section, value)
    except: # The config file could be corrupted
        print( "Error reading " + fileName + " configuration file." )
        sys.exit(1) #Stop us from crashing later
    if delimeter != "": # We may not need to split
        returnedList = returnedString.split(delimeter)
    return returnedList

私はこれに使用します:

taskStrings = list(getFromConfig(teamName, "Y","Z",","))
4

3 に答える 3

13

ConfigParser_read()メソッドの docstring は次のように述べています。

継続は、埋め込まれた改行と先頭の空白によって表されます。

または、代わりに (Python 3 のバージョンがそれを示しているように):

値の最初の行よりも深くインデントされている限り、値は複数の行にまたがることができます。

この機能は、値を分割して複数の行にまたがって「継続」する手段を提供します。たとえば、次のような名前の構成ファイルが'test.ini'あるとします。

[EG SECTION]<br>
EG=<br>
  item 1<br>
  item 2<br>
  item 3<br>

次のようなコードを使用して、の値をリストにEG読み込むことができます。EG SECTION

try:
    import ConfigParser as configparser
except ImportError:  # Python 3
    import configparser

cp = configparser.ConfigParser()
cp.read('test.ini')

eg = cp.get('EG SECTION', 'EG')
print(repr(eg))  # -> '\nitem 1\nitem 2\nitem 3'

cleaned = [item for item in eg.strip().split('\n')]
print(cleaned)  # -> ['item 1', 'item 2', 'item 3']
于 2012-07-09T18:45:19.943 に答える
2

可能のようです。たとえば、私自身の構成ファイルには、タプルを含むリスト オブジェクトがあります。

[root]
path: /
redirectlist: [ ( r'^magic', '/file' ),
    ( r'^avplay', '/file' ),
    ( r'^IPTV', '/file' ),
    ( r'^box', '/file' ),
    ( r'^QAM', '/qam' ),
    ( r'.*opentv.*', '/qam' ),
    ( r'.+', '/file' ) ]

そして私は:

redirectstr = _configdict.get('root', 'redirectlist')
redirects = eval(redirectstr)

私は実際にその行を評価していることに注意してください。これを実際に使用すると、セキュリティ違反が発生する可能性があります。

于 2012-07-09T17:03:49.760 に答える