Aller au contenu
Aback Tools Logo

Comment créer un fichier INI : règles de syntaxe, sections et parseurs

Comment créer un fichier INI : règles de syntaxe universelles, conventions de nommage des sections et clés, pièges des commentaires et de l'encodage, différences entre parseurs Python, PHP et Windows, et quand choisir INI plutôt que TOML ou YAML.

DH
Tutorials & How-Tos11 min de lecture2,550 mots

Le format de fichier INI sert à stocker les paramètres d'application depuis les débuts de Windows, et il reste largement utilisé dans les projets Python, les configurations PHP, MySQL, Git et des dizaines d'autres outils. En créer un correctement demande de comprendre quelques règles de syntaxe, de savoir où les parseurs divergent et de choisir le bon format pour votre cas d'usage. Ce guide couvre tout — de la première ligne à la validation.

1983Origine du formatépoque de Microsoft Windows 1.x
0Bibliothèques spécialestexte brut, tout éditeur convient
2 niveauxProfondeur native max.sections + paires clé-valeur

Qu'est-ce qu'un fichier INI ?

Un fichier INI est un fichier de configuration en texte brut qui stocke les paramètres sous forme de paires clé-valeur, éventuellement regroupées en sections nommées. Le nom vient de « initialisation » — les fichiers INI servaient à initialiser les applications Windows avec leurs paramètres avant l'existence du Registre Windows. Le format n'a jamais eu de spécification formelle, mais un standard de fait s'est dégagé d'un usage répandu.

Où les fichiers INI sont utilisés aujourd'hui

  • Empaquetage Python — `setup.cfg`, `tox.ini`, `pytest.ini`, `mypy.ini`, `.flake8`
  • Exécution PHP — `php.ini` contrôle globalement les paramètres de l’interpréteur PHP
  • MySQL / MariaDB — `my.ini` (Windows) et `my.cnf` (Unix) configurent le serveur de base de données
  • Git — `.gitconfig` et `.git/config` utilisent un format proche d’INI pour les dépôts et les réglages utilisateur
  • Wine — `wine.inf` configure la couche de compatibilité Windows sur Linux et macOS
  • Applications Windows — des milliers d’applications de bureau anciennes et modernes stockent leurs préférences dans des fichiers `.ini` du dossier AppData

INI vs le Registre Windows

Microsoft a migré les paramètres des applications Windows vers le Registre au début des années 1990 pour des raisons de performance et de gestion centralisée. Cependant, beaucoup de développeurs continuent de préférer les fichiers INI pour leur portabilité — un fichier INI peut être inspecté et modifié avec n'importe quel éditeur de texte, versionné et copié entre machines sans outil d'export/import. Le Registre ne le peut pas.

Note

Comme INI n'a pas de spécification formelle, différents parseurs implémentent des règles légèrement différentes pour les cas limites : si # est un caractère de commentaire valide, si les commentaires en ligne sont autorisés et comment les clés dupliquées sont gérées. Le `configparser` de Python, `GetPrivateProfileString` de Windows et `parse_ini_file()` de PHP divergent sur au moins un de ces points.

Règles de syntaxe des fichiers INI

Malgré l'absence de spécification formelle, la syntaxe INI suit des conventions cohérentes dans pratiquement tous les parseurs. Voici les règles sur lesquelles vous pouvez compter, quel que soit ce qui lit votre fichier.

Un fichier INI est le format de configuration le plus simple possible : des sections entre crochets, des paires clé-valeur en dessous et des points-virgules pour les commentaires. Tout le reste est spécifique au parseur.

- Consensus informel sur le format INI

Règles universelles

  • Une paire clé-valeur par ligne — `key = value` ou `key=value` ; l’espace autour de `=` est facultatif mais un espacement cohérent reste lisible
  • En-têtes de section — `[NomSection]` seul sur sa ligne ; aucun contenu après le crochet fermant
  • Lignes de commentaire — commencent par `;` pour une compatibilité maximale ; `#` est pris en charge par certains parseurs (`configparser` Python, outils Linux) mais pas par les API natives Windows
  • Lignes vides — ignorées par tous les parseurs ; utilisez-les librement pour séparer les groupes logiques au sein d’une section
  • Pas d’imbrication — INI est plat : les sections contiennent des paires clé-valeur, pas d’autres sections
  • Valeurs chaînes — toutes les valeurs sont des chaînes sauf si le parseur les convertit ; `count = 5` est la chaîne « 5 » pour la plupart des parseurs

Ce que voit le parseur

Le parseur construit une carte à deux niveaux : nom de section → clé → valeur. Si un fichier n'a pas d'en-tête de section, les valeurs se trouvent dans une section implicite « par défaut » — le `configparser` de Python l'appelle `DEFAULT`. Le fait que le parseur fusionne la section par défaut avec les sections nommées varie. Les clés et noms de section sont traités quasi universellement comme insensibles à la casse par convention, même si ce n'est pas garanti par toutes les implémentations.

Tip

Validez toujours votre fichier INI avec le [Validateur INI](/tools/data/validators/ini-validator) avant de le déployer. Les erreurs silencieuses courantes — une faute de frappe dans un nom de section, une clé dupliquée ou une valeur sur la même ligne qu'un en-tête de section — passeront une relecture visuelle mais amèneront le parseur à utiliser silencieusement la mauvaise valeur.

Créer votre premier fichier INI

Créer un fichier INI prend moins de cinq étapes. Le seul outil requis est un éditeur de texte brut — tout éditeur qui enregistre en UTF-8 ou ASCII sans marque d'ordre des octets (BOM) fonctionne correctement.

1

Créez un nouveau fichier texte avec l'extension .ini

Ouvrez votre éditeur de texte (VS Code, Bloc-notes, nano, vim — tous conviennent) et créez un nouveau fichier. Enregistrez-le avec l'extension `.ini` avant d'écrire du contenu afin que l'éditeur applique la coloration syntaxique INI si disponible. Sous Windows, assurez-vous que « Type » est réglé sur « Tous les fichiers » dans le Bloc-notes pour éviter que le fichier ne soit enregistré en `config.ini.txt` au lieu de `config.ini`.

2

Ajoutez votre premier en-tête de section

Écrivez votre premier nom de section entre crochets, seul sur sa ligne. Les noms de section sont des étiquettes descriptives — `[database]`, `[server]`, `[logging]` sont des choix conventionnels. Vous pouvez aussi commencer immédiatement à écrire des paires clé-valeur sans en-tête de section si votre configuration est assez simple pour ne pas nécessiter de regroupement.

3

Ajoutez des paires clé-valeur sous chaque section

Sous l'en-tête de section, écrivez une paire `key = value` par ligne. Les clés doivent être en minuscules avec des traits de soulignement (snake_case) pour une compatibilité maximale entre parseurs. Les valeurs peuvent inclure des espaces, de la ponctuation et la plupart des caractères spéciaux. N'entourez pas les valeurs de guillemets — les guillemets sont traités comme des caractères littéraux par la plupart des parseurs, non comme des délimiteurs de chaîne.

4

Ajoutez des commentaires pour documenter les valeurs non évidentes

Commencez les lignes de commentaire par un point-virgule (`;`). Les commentaires doivent figurer sur leur propre ligne dédiée — placer un commentaire après une valeur sur la même ligne (`host = localhost ; primary DB`) n'est pas fiable avec tous les parseurs et peut inclure le texte du commentaire dans la valeur. Si vous avez besoin de notes en ligne, placez-les sur la ligne précédente en commentaire autonome.

5

Validez le fichier terminé

Collez votre fichier INI terminé dans le Validateur INI pour vérifier les erreurs de syntaxe, les noms de sections dupliqués et la conformité du format. Le validateur signale les problèmes avec les numéros de ligne afin que vous puissiez les corriger avant la mise en production. Si vous avez besoin d'un format cohérent, passez-le d'abord par le Formateur INI.

Validateur INI

Vérifiez tout fichier INI ou CFG pour détecter erreurs de syntaxe, sections dupliquées et conformité du format — rapports d'erreurs au niveau de la ligne, sans aucun envoi.

Open tool

Sections, clés et valeurs en détail

Les trois éléments structurels d'un fichier INI — sections, clés et valeurs — ont des règles et des cas limites qu'il vaut la peine de comprendre avant d'écrire une configuration qui sera lue par le parseur de quelqu'un d'autre.

Conventions de nommage des sections

Les noms de section vont entre crochets et apparaissent seuls sur leur ligne. Ils peuvent contenir des lettres, des chiffres, des espaces et la plupart des signes de ponctuation — mais les espaces dans les noms de section sont mal pris en charge par certains parseurs et doivent être évités. Utilisez `[DatabaseConfig]` ou `[database_config]` plutôt que `[database config]`. Les noms de section dupliqués sont soit fusionnés, soit provoquent une erreur selon le parseur — considérez-les comme interdits et validez avec le Validateur INI pour les détecter.

Règles de nommage des clés

Les clés ne doivent pas contenir le signe `=` ni un retour à la ligne. Au-delà, les conventions varient, mais la pratique la plus sûre consiste à n'utiliser que des lettres minuscules, des chiffres et des traits de soulignement — les mêmes règles que les noms de variables Python. Évitez les tirets dans les clés si vous comptez les lire en Python avec `configparser`, car Python renvoie les clés telles quelles et les clés avec tirets ne sont pas accessibles comme attributs.

Types de valeurs et valeurs multilignes

Toutes les valeurs des fichiers INI sont des chaînes sauf si votre parseur les convertit explicitement. `enabled = true` est la chaîne « true » — votre code doit la convertir en booléen. Le `configparser` de Python fournit les méthodes `getboolean()`, `getint()` et `getfloat()` à cet effet. Les valeurs multilignes sont prises en charge par certains parseurs (le `configparser` de Python traite les lignes commençant par des espaces comme la continuation de la valeur précédente) mais pas tous — consultez la documentation de votre parseur avant de compter dessus.


La section DEFAULT

Le `configparser` de Python traite une section nommée `[DEFAULT]` (insensible à la casse) comme une section de repli spéciale. Toute clé définie dans `[DEFAULT]` est disponible dans toutes les autres sections comme valeur de repli — si une section ne définit pas une clé, la valeur de `[DEFAULT]` est renvoyée à la place. C'est un comportement propre à Python, absent de la plupart des autres parseurs. Si vous écrivez des fichiers INI spécifiquement pour Python, `[DEFAULT]` est un moyen pratique de définir des valeurs partagées sans les répéter dans chaque section.

Warning

Ne placez pas de valeurs sensibles — mots de passe, clés d'API, jetons — dans des fichiers INI destinés à être versionnés. Les fichiers INI sont en texte brut et trivialement lisibles. Stockez les valeurs sensibles dans des variables d'environnement et référencées par leur nom dans le fichier INI à titre d'indication : `password = <DB_PASSWORD>` (en notant que la plupart des parseurs INI traiteront cela comme la chaîne littérale, non comme une expansion de variable).

Commentaires et encodage

Les commentaires et l'encodage des caractères sont les deux aspects des fichiers INI les plus susceptibles de causer des problèmes silencieux lorsque les fichiers circulent entre outils, systèmes d'exploitation ou langages différents.

Caractères de commentaire : ; vs #

Le point-virgule (`;`) est le caractère de commentaire universellement pris en charge — il fonctionne avec le `configparser` de Python, les API natives Windows, `parse_ini_file()` de PHP, MySQL et pratiquement tout autre parseur INI. Le dièse (`#`) est pris en charge par le `configparser` de Python et la plupart des parseurs Linux, mais pas par `GetPrivateProfileString()` de Windows. Si votre fichier INI ne sera lu que par Python, l'un ou l'autre caractère est sûr. Pour des fichiers multiplateformes, utilisez exclusivement `;`.

Encodage des caractères : UTF-8 vs Windows-1252

Enregistrez les fichiers INI en UTF-8 sans BOM pour les outils modernes. Le BOM (marque d'ordre des octets, le caractère invisible `\uFEFF` au début de certains fichiers UTF-8 enregistrés par des outils Windows) pose des problèmes avec les parseurs qui le traitent comme faisant partie du premier nom de clé. Le `configparser` de Python gère l'UTF-8 nativement depuis Python 3. Si vous écrivez un fichier INI pour une application Windows héritée attendant l'encodage Windows-1252, alignez-vous sur ce que l'application attend — mélanger les encodages est une source courante de corruption de caractères dans les valeurs.

Fins de ligne

Les fichiers INI fonctionnent aussi bien avec les fins de ligne Windows (CRLF, `\r\n`) que Unix (LF, `\n`). Utilisez la convention de la plateforme cible. Si vous modifiez un fichier INI sous Windows pour un déploiement sous Linux, configurez votre éditeur pour enregistrer avec des fins de ligne LF afin d'éviter que le caractère de retour chariot n'apparaisse dans les valeurs avec les parseurs Linux. Le Formateur INI normalise les fins de ligne et l'espacement en une seule passe.

Lire des fichiers INI en code

La plupart des langages fournissent un parseur intégré ou de bibliothèque standard pour les fichiers INI. Voici les approches standard pour les environnements les plus courants.

Python : configparser

Le module `configparser` de Python est la manière standard de lire les fichiers INI en Python. Importez-le, créez une instance `ConfigParser()`, appelez `.read()` avec votre nom de fichier et accédez aux valeurs avec `config["NomSection"]["clé"]` ou `config.get("NomSection", "clé")`. La méthode `.get()` accepte un argument `fallback` qui renvoie une valeur par défaut lorsque la clé est absente — utile pour les paramètres optionnels. Utilisez `getboolean()`, `getint()` et `getfloat()` pour des valeurs typées plutôt que de convertir les chaînes manuellement.

PHP : parse_ini_file()

PHP fournit `parse_ini_file($filename, $process_sections)` comme fonction intégrée. Avec `$process_sections = true`, la fonction renvoie un tableau associatif imbriqué organisé par nom de section. Avec `false`, elle renvoie un tableau plat avec toutes les clés fusionnées. Le parseur PHP est strict sur certains caractères spéciaux dans les valeurs non quotées — les valeurs contenant =, accolades ouvrante/fermante, |, &, ~, !, [, ] doivent être quotées dans le fichier INI pour être correctement analysées.

Node.js et autres environnements

Node.js n'a pas de parseur INI intégré, mais le paquet npm `ini` (licence MIT) fournit une interface standard `parse()` et `stringify()`. Pour Java, la bibliothèque `org.ini4j` est le choix standard. Pour Go, le paquet `gopkg.in/ini.v1` est l'option la plus utilisée. Dans chaque cas, la bibliothèque gère la même structure à deux niveaux section/clé — les formes d'API varient mais le format sous-jacent est identique.

Tip

Si vous devez migrer un fichier de configuration INI vers un format moderne, le [Convertisseur INI vers YAML](/tools/data/converters/ini-to-yaml) convertit votre fichier INI en YAML bien structuré instantanément dans votre navigateur. Pour les projets d'empaquetage Rust ou Python adoptant des outils modernes, envisagez TOML — le [Validateur TOML](/tools/data/validators/toml-validator) vous aide à vérifier le résultat converti.

INI vs TOML vs YAML

INI n'est pas toujours le bon format de configuration. Comprendre où il s'inscrit — et où TOML ou YAML est un meilleur choix — vous aide à prendre la bonne décision pour vos nouveaux projets.

CaractéristiqueINITOMLYAML
Complexité de syntaxeMinimaleModéréeÉlevée
Support natif des types✗ Chaînes seulement✓ Types complets✓ Types complets
Structures imbriquées✗ Deux niveaux max.✓ Tables en ligne✓ Profondeur illimitée
Tableaux / listes✗ Non standard✓ Tableaux natifs✓ Séquences en bloc
Commentaires✓ ; et #✓ # seulement✓ # seulement
Spécification formelle✗ Pas de spécification officielle✓ Spécification TOML✓ Spécification YAML 1.2
Idéal pourConfig. simple d’appliRust, paquets PythonDevOps, Kubernetes
LisibilitéTrès élevéeÉlevéeMoyenne (sensible à l’indentation)

Quand utiliser INI

INI est le bon choix lorsque votre configuration est profonde de deux niveaux (sections et paires clé-valeur plates), lorsque le parseur cible attend déjà le format INI (PHP, écosystème Python, MySQL, Git) et lorsque vous voulez le format le plus simple possible que n'importe quel développeur puisse lire sans connaissance préalable. Il n'est pas approprié pour les configurations nécessitant des tableaux, des objets imbriqués ou des données typées.

Quand utiliser TOML ou YAML à la place

Choisissez TOML lorsque votre configuration a besoin de valeurs typées, de tableaux ou de tables en ligne et que vous voulez une spécification stricte avec un parsing prévisible. TOML est le format de `pyproject.toml`, `Cargo.toml` et des fichiers de configuration de Hugo. Choisissez YAML lorsque vous avez besoin de structures profondément imbriquées ou que vous travaillez dans un écosystème où YAML est déjà standard — Kubernetes, GitHub Actions, Docker Compose et Ansible sont tous des environnements « YAML-first ».

Key takeaways

  • Un fichier INI est un fichier de configuration en texte brut avec des sections nommées entre `[crochets]` et des paires `key = value` en dessous.
  • Utilisez `;` pour les commentaires — pas `#` — pour une compatibilité maximale entre Windows, PHP, Python et les autres parseurs INI.
  • Enregistrez les fichiers INI en UTF-8 sans BOM ; évitez les commentaires en ligne (après une valeur sur la même ligne) car ils ne sont pas universellement pris en charge.
  • Toutes les valeurs INI sont des chaînes sauf si votre parseur les convertit explicitement — utilisez `getboolean()`, `getint()` et `getfloat()` en Python.
  • Ne stockez jamais de mots de passe ni de clés d'API dans des fichiers INI versionnés — utilisez des variables d'environnement pour les valeurs sensibles.
  • Validez avec le Validateur INI avant le déploiement pour détecter erreurs de syntaxe, sections dupliquées et problèmes de format.
  • Utilisez TOML pour les configurations nécessitant des valeurs typées et des tableaux ; utilisez YAML pour les structures profondément imbriquées — INI n'est idéal que pour des configurations simples à deux niveaux.

Questions fréquentes

An INI file is a plain text configuration file that stores settings as key-value pairs, optionally organised into named sections using square bracket headers. The format originated with early Microsoft Windows to store application settings, and remains in use in Python projects (setup.cfg, tox.ini), PHP (php.ini), MySQL (my.ini), Git (.gitconfig), Wine, and many other tools. INI files are human-readable, require no special parser library, and edit cleanly with any text editor.

Create a new plain text file in any text editor and save it with a .ini extension. Add named sections using square brackets - [SectionName] - and list key = value pairs beneath each section, one per line. Add comments by starting a line with a semicolon (;). The file requires no special opening declaration or closing tag. Once written, validate it with the INI Validator to catch any syntax errors before putting it into use.

The basic rules are: section names go in square brackets on their own line ([SectionName]); key-value pairs use the format key = value, with one pair per line; comments start with ; on a standalone line; blank lines are ignored; keys and section names are typically case-insensitive but this depends on the parser. There is no official INI standard - each application that reads INI files may support slight variations of this syntax.

The .ini extension is the conventional choice for INI format files. Some applications use .cfg (configuration) or .conf - both are plain INI-format files with different extensions. Python projects commonly use setup.cfg and tox.ini. MySQL uses my.ini on Windows and my.cnf on Unix. The extension does not affect the format - the parser reads the file the same way regardless of the extension name.

Yes. Lines starting with a semicolon (;) are treated as comments by almost all INI parsers. Some parsers also support lines starting with # as comments - Python's configparser supports both, while Windows' GetPrivateProfileString only supports ;. For maximum compatibility across different parsers and operating systems, use ; for all comment lines. Inline comments (placed after a value on the same line) are not universally supported and should be avoided.

Python's standard library includes the configparser module specifically for reading INI-format files. Import it with `import configparser`, create a parser with `config = configparser.ConfigParser()`, and load your file with `config.read("config.ini")`. Access values with `config["SectionName"]["key"]`. By default, configparser converts all keys to lowercase and treats section names as case-sensitive. The module handles multi-line values, % interpolation, and fallback values out of the box.

INI is the simplest: flat sections with string key-value pairs and no native type support. TOML adds types (integers, booleans, arrays, inline tables) with a strict spec and is the format of choice for Rust (Cargo.toml) and Python packaging (pyproject.toml). YAML is the most expressive but also the most complex, supporting nested structures, anchors, and aliases - common in Kubernetes, GitHub Actions, and Docker Compose. For simple two-level configuration, INI is readable and sufficient. For anything with arrays or nested structure, TOML or YAML is more appropriate.

It depends entirely on the parser. Python's configparser converts all keys to lowercase by default, making them case-insensitive in practice. Windows' native INI functions are also case-insensitive. However, there is no universal standard - some parsers treat keys as case-sensitive. To avoid ambiguity, always write keys in a consistent case throughout your file. Lowercase with underscores (snake_case) is the most common convention and the safest choice for cross-parser compatibility.

ShareXLinkedIn