170 votes

Comment lire et écrire un fichier INI avec Python3 ?

Je dois lire, écrire et créer un 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!!' )

MISE À JOUR FILE.INI

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

7 votes

2 votes

En fait, que diriez-vous de stackoverflow.com/a/3220891/716118 ?

1 votes

Un fichier ini digne de ce nom doit comporter un titre de section tel que [foobar] .

211voto

Rik Poggi Points 10195

Il peut s'agir d'un point de départ :

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)

Pour en savoir plus, consultez le site documentation officielle de configparser .

9 votes

Donne configparser.MissingSectionHeaderError lors de l'utilisation des fichiers d'exemple fournis sans les en-têtes de section appropriés.

109voto

Agostino Points 124

Voici un exemple complet de lecture, de mise à jour et d'é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 original reste inchangé.

0 votes

Sur mon système Python 3.7, la ligne "config.set('section_b', 'not_found_val', 404)" a dû être remplacée par "config.set('section_b', 'not_found_val', str(404))" car les paramètres de "set" doivent être des chaînes de caractères. Excellent exemple, merci !

1 votes

Ressemble à la read renvoie désormais une liste des fichiers lus / fichier, mais pas le contenu.

12voto

Alex Points 49

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

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

10voto

Robert Siemer Points 1323

La norme ConfigParser nécessite normalement un accès par l'intermédiaire de config['section_name']['key'] ce qui n'est pas drôle. Une petite modification peut permettre l'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 d'accéder à la fois aux clés du dictionnaire et aux attributs : cela signifie que a.x is a['x']

Nous pouvons utiliser cette classe dans ConfigParser :

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

et nous obtenons maintenant application.ini avec :

[general]
key = value

comme

>>> config._sections.general.key
'value'

8voto

RK-Muscles God Points 31

Contenu dans mon backup_settings.ini fichier

[Settings]
year = 2020

code python pour la lecture

import configparser
config = configparser.ConfigParser()
config.read('backup_settings.ini') #path of your .ini file
year = config.get("Settings","year") 
print(year)

pour l'écriture ou la mise à jour

from pathlib import Path
import configparser
myfile = Path('backup_settings.ini')  #Path of your .ini file
config.read(myfile)
config.set('Settings', 'year','2050') #Updating existing entry 
config.set('Settings', 'day','sunday') #Writing new entry
config.write(myfile.open("w"))

sortie

[Settings]
year = 2050
day = sunday

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X