Jak odczytywać i zapisywać pliki INI za pomocą Python3?

Muszę czytać, pisać i tworzyć ini Plik z Python3.

Plik.INI

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

Plik Pythona:

#    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!!' )

ZAKTUALIZOWANO PLIK .INI

default_path    = "var/shared/"
default_file    = "file.txt"
default_message = "Hey! help me!!"
Author: Olaf Erlandsen, 2012-01-16

5 answers

To może być coś na początek:

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)
Więcej informacji można znaleźć w oficjalnej dokumentacji configparsera.
 102
Author: Rik Poggi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-24 04:07:44

Oto kompletny przykład odczytu, aktualizacji i zapisu.

Plik wejściowy, test.ini

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

Kod roboczy.

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)

Plik wyjściowy, 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

Oryginalny plik wejściowy pozostaje nietknięty.

 47
Author: Agostino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-20 19:48:07

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

Standardowa biblioteka Pythona może być pomocna w tym przypadku.

 8
Author: Alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-16 18:03:42

Standard ConfigParser zwykle wymaga dostępu przez config['section_name']['key'], co nie jest zabawne. Mała modyfikacja może zapewnić dostęp do atrybutów:

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

AttrDict jest klasą pochodzącą z dict, która umożliwia dostęp za pomocą zarówno kluczy słownikowych, jak i dostępu do atrybutów: oznacza to a.x is a['x']

Możemy użyć tej klasy w ConfigParser:

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

A teraz otrzymujemy application.ini z:

[general]
key = value

Jako

>>> config._sections.general.key
'value'
 2
Author: Robert Siemer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:36

ConfigObj jest dobrą alternatywą dla Configparsera, który oferuje o wiele większą elastyczność:

  • zagnieżdżone sekcje( podrozdziały), do dowolnego poziomu
  • wartości listy
  • wiele wartości linii
  • String interpolation (substitution)
  • zintegrowany z potężnym systemem walidacji, w tym automatycznym sprawdzaniem typu / konwersją powtarzanych sekcji i dopuszczaniem wartości domyślnych
  • Podczas zapisywania plików konfiguracyjnych ConfigObj zachowuje wszystkie komentarze i kolejność członkowie i sekcje
  • wiele przydatnych metod i opcji pracy z plikami konfiguracyjnymi (jak metoda 'reload')
  • Pełna obsługa Unicode

Ma kilka rysunków:

  • nie można ustawić ogranicznika, musi być =... (pull request )
  • nie możesz mieć pustych wartości, cóż, możesz, ale wyglądają na podobne: fuabr = zamiast tylko fubar co wygląda dziwnie i źle.
 2
Author: Sardathrion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-11 08:16:09