1. ホーム
  2. python

ConfigParser.items('')を辞書に変換する

2023-08-01 17:36:17

質問

ConfigParser.items('section')の結果を辞書に変換して、このような文字列をフォーマットするにはどうすればよいですか。

import ConfigParser

config = ConfigParser.ConfigParser()
config.read('conf.ini')

connection_string = ("dbname='%(dbname)s' user='%(dbuser)s' host='%(host)s' "
                     "password='%(password)s' port='%(port)s'")

print connection_string % config.items('db')

どのように解決するのですか?

これは、実はすでに config._sections . 例

$ cat test.ini
[First Section]
var = value
key = item

[Second Section]
othervar = othervalue
otherkey = otheritem

そして

>>> from ConfigParser import ConfigParser
>>> config = ConfigParser()
>>> config.read('test.ini')
>>> config._sections
{'First Section': {'var': 'value', '__name__': 'First Section', 'key': 'item'}, 'Second Section': {'__name__': 'Second Section', 'otherkey': 'otheritem', 'othervar': 'othervalue'}}
>>> config._sections['First Section']
{'var': 'value', '__name__': 'First Section', 'key': 'item'}

編集します。 同じ問題に対する私の解決策はdownvotedされたので、私はさらに私の答えがセクションを通過させることなく同じことをする方法を説明します。 dict() なぜなら config._sections はすでにモジュールによって提供されているからです。 .

test.iniの例です。

[db]
dbname = testdb
dbuser = test_user
host   = localhost
password = abc123
port   = 3306

マジックが起こる。

>>> config.read('test.ini')
['test.ini']
>>> config._sections
{'db': {'dbname': 'testdb', 'host': 'localhost', 'dbuser': 'test_user', '__name__': 'db', 'password': 'abc123', 'port': '3306'}}
>>> connection_string = "dbname='%(dbname)s' user='%(dbuser)s' host='%(host)s' password='%(password)s' port='%(port)s'"
>>> connection_string % config._sections['db']
"dbname='testdb' user='test_user' host='localhost' password='abc123' port='3306'"

つまり、この解決策は ではない は間違っていて、実際には1つ少ないステップが必要です。 お立ち寄りいただきありがとうございます。