web-dev-qa-db-fra.com

Comment lire et écrire INI avec Python3?

J'ai besoin de lire, écrire et créer un fichier INI avec Python3.

FILE.INI

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

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

[~ # ~] mis à jour [~ # ~] FILE.INI

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

Cela peut être quelque chose pour commencer:

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)

Vous pouvez trouver plus d'informations sur le documentation officielle de configparser .

117
Rik Poggi

Voici un exemple complet de lecture, mise à jour et écriture.

Fichier d'entrée, test.ini

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

Code de travail.

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)

Fichier de sortie, 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

Le fichier d'entrée d'origine reste inchangé.

67
Agostino

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

La bibliothèque standard de Python pourrait être utile dans ce cas.

8
Alex

La norme ConfigParser nécessite normalement un accès via config['section_name']['key'], ce qui n'est pas amusant. Une petite modification peut fournir un accès aux attributs:

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

AttrDict est une classe dérivée de dict qui permet l’accès à la fois par les clés du dictionnaire et par les attributs: c’est-à-dire a.x is a['x']

Nous pouvons utiliser cette classe dans ConfigParser:

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

et maintenant nous obtenons application.ini avec:

[general]
key = value

comme

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

ConfigObj est une bonne alternative à ConfigParser qui offre beaucoup plus de flexibilité:

  • Sections imbriquées (sous-sections), à n'importe quel niveau
  • Liste des valeurs
  • Valeurs de ligne multiples
  • Interpolation de chaîne (substitution)
  • Intégré à un système de validation puissant comprenant la vérification/la conversion automatique de type, les sections répétées et les valeurs par défaut
  • Lors de la rédaction de fichiers de configuration, ConfigObj conserve tous les commentaires et l’ordre des membres et des sections.
  • Nombreuses méthodes et options utiles pour travailler avec des fichiers de configuration (comme la méthode 'reload')
  • Prise en charge complète de Unicode

Il a quelques inconvénients:

  • Vous ne pouvez pas définir le délimiteur, il doit être =… ( demande d'extraction )
  • Vous ne pouvez pas avoir de valeurs vides, vous pouvez, mais elles ont l’air aimé: fuabr = _ au lieu de fubar qui a l’air bizarre et faux.
3
Sardathrion