web-dev-qa-db-ja.com

Python3でINIファイルを読み書きする方法は?

Python3でINIファイルを読み取り、書き込み、作成する必要があります。

FILE.INI

default_path = "/path/name/"
default_file = "file.txt"

Pythonファイル:

#    Read file and and create if it not exists
config = iniFile( 'FILE.INI' )

#    Get "default_path"
config.default_path

#    Print (string)/path/name
print config.default_path

#    Create or Update
config.append( 'default_path', 'var/shared/' )
config.append( 'default_message', 'Hey! help me!!' )

更新済みFILE.INI

default_path    = "var/shared/"
default_file    = "file.txt"
default_message = "Hey! help me!!"
91

これは、次のものから始めることができます。

import configparser

config = configparser.ConfigParser()
config.read('FILE.INI')
print(config['DEFAULT']['path'])     # -> "/path/name/"
config['DEFAULT']['path'] = '/var/shared/'    # update
config['DEFAULT']['default_message'] = 'Hey! help me!!'   # create

with open('FILE.INI', 'w') as configfile:    # save
    config.write(configfile)

詳細は configparserの公式ドキュメント で見つけることができます。

117
Rik Poggi

完全な読み取り、更新、書き込みの例を次に示します。

入力ファイル、test.ini

[section_a]
string_val = hello
bool_val = false
int_val = 11
pi_val = 3.14

作業コード。

try:
    from configparser import ConfigParser
except ImportError:
    from ConfigParser import ConfigParser  # ver. < 3.0

# instantiate
config = ConfigParser()

# parse existing file
config.read('test.ini')

# read values from a section
string_val = config.get('section_a', 'string_val')
bool_val = config.getboolean('section_a', 'bool_val')
int_val = config.getint('section_a', 'int_val')
float_val = config.getfloat('section_a', 'pi_val')

# update existing value
config.set('section_a', 'string_val', 'world')

# add a new section and some values
config.add_section('section_b')
config.set('section_b', 'meal_val', 'spam')
config.set('section_b', 'not_found_val', 404)

# save to a file
with open('test_update.ini', 'w') as configfile:
    config.write(configfile)

出力ファイル、test_update.ini

[section_a]
string_val = world
bool_val = false
int_val = 11
pi_val = 3.14

[section_b]
meal_val = spam
not_found_val = 404

元の入力ファイルは変更されません。

67
Agostino

http://docs.python.org/library/configparser.html

この場合、Pythonの標準ライブラリが役立つ場合があります。

8
Alex

標準のConfigParserは通常、config['section_name']['key']を介したアクセスを必要としますが、これは面白くありません。少し変更するだけで、属性へのアクセスを提供できます。

class AttrDict(dict):
    def __init__(self, *args, **kwargs):
        super(AttrDict, self).__init__(*args, **kwargs)
        self.__dict__ = self

AttrDict は、dictから派生したクラスで、辞書キーと属性アクセスの両方を介したアクセスを許可します。つまり、a.x is a['x']を意味します

このクラスをConfigParserで使用できます。

config = configparser.ConfigParser(dict_type=AttrDict)
config.read('application.ini')

そして今、application.iniを取得します:

[general]
key = value

なので

>>> config._sections.general.key
'value'
4
Robert Siemer

ConfigObj は、ConfigParserの優れた代替手段であり、柔軟性が大幅に向上します。

  • ネストされたセクション(サブセクション)、あらゆるレベル
  • リスト値
  • 複数行の値
  • 文字列補間(置換)
  • 自動型チェック/変換繰り返しセクションを含む強力な検証システムと統合され、デフォルト値を許可します
  • 構成ファイルを書き出すとき、ConfigObjはすべてのコメントとメンバーとセクションの順序を保持します
  • 構成ファイルを操作するための多くの便利なメソッドとオプション(「reload」メソッドなど)
  • 完全なUnicodeサポート

それにはいくつかの欠点があります:

  • 区切り文字を設定することはできません。=…である必要があります( プルリクエスト
  • 空の値を持つことはできませんが、そうすることはできますが、似ているように見えます:fubarだけではなく、fuabr =は奇妙で間違っています。
3
Sardathrion