Zum Inhalt springen
Aback Tools Logo

So erstellen Sie eine INI-Datei: Syntaxregeln, Abschnitte und Parser

So erstellen Sie eine INI-Datei: universelle Syntaxregeln, Konventionen für Abschnitts- und Schlüsselnamen, Stolpersteine bei Kommentaren und Kodierung, Parser-Unterschiede in Python, PHP und Windows sowie wann Sie INI statt TOML oder YAML verwenden.

DH
Tutorials & How-Tos11 Min. Lesezeit2,550 Wörter

Das INI-Dateiformat wird seit den frühen Windows-Tagen zum Speichern von Anwendungseinstellungen verwendet und kommt weiterhin aktiv in Python-Projekten, PHP-Konfigurationen, MySQL, Git und Dutzenden anderer Tools zum Einsatz. Eine korrekt zu erstellen erfordert das Verständnis einiger Syntaxregeln, das Wissen, wo Parser in ihrem Verhalten abweichen, und die Wahl des richtigen Formats für Ihren Anwendungsfall. Dieser Leitfaden deckt alles ab – von der ersten Zeile bis zur Validierung.

1983Ursprung des FormatsÄra von Microsoft Windows 1.x
0Spezielle BibliothekenKlartext, jeder Editor funktioniert
2 EbenenMax. native TiefeAbschnitte + Schlüssel-Wert-Paare

Was ist eine INI-Datei?

Eine INI-Datei ist eine Klartext-Konfigurationsdatei, die Einstellungen als Schlüssel-Wert-Paare speichert, optional gruppiert in benannte Abschnitte. Der Name kommt von „Initialisierung“ – INI-Dateien wurden verwendet, um Windows-Anwendungen mit ihren Einstellungen zu initialisieren, bevor es die Windows-Registrierung gab. Das Format hatte nie eine formale Spezifikation, aber ein faktischer Standard entstand durch die weitverbreitete Nutzung.

Wo INI-Dateien heute verwendet werden

  • Python-Paketierung – `setup.cfg`, `tox.ini`, `pytest.ini`, `mypy.ini`, `.flake8`
  • PHP-Laufzeit – `php.ini` steuert global die Einstellungen des PHP-Interpreters
  • MySQL / MariaDB – `my.ini` (Windows) und `my.cnf` (Unix) konfigurieren den Datenbankserver
  • Git – `.gitconfig` und `.git/config` verwenden ein INI-ähnliches Format für Repository- und Benutzereinstellungen
  • Wine – `wine.inf` konfiguriert die Windows-Kompatibilitätsschicht unter Linux und macOS
  • Windows-Anwendungen – Tausende ältere und moderne Desktop-Apps speichern Einstellungen in `.ini`-Dateien im AppData-Ordner

INI vs. die Windows-Registrierung

Microsoft verlagerte die Einstellungen von Windows-Anwendungen Anfang der 1990er Jahre in die Registrierung, aus Gründen der Performance und zentralisierten Verwaltung. Viele Entwickler ziehen INI-Dateien jedoch weiterhin wegen der Portabilität vor – eine INI-Datei kann mit jedem Texteditor eingesehen und bearbeitet, in die Versionskontrolle eingecheckt und zwischen Maschinen kopiert werden, ganz ohne Export-/Import-Tools. Die Registrierung kann das nicht.

Note

Da INI keine formale Spezifikation hat, implementieren verschiedene Parser leicht unterschiedliche Regeln für Randfälle: ob # ein gültiges Kommentarzeichen ist, ob Inline-Kommentare erlaubt sind und wie doppelte Schlüssel behandelt werden. Pythons `configparser`, Windows’ `GetPrivateProfileString` und PHPs `parse_ini_file()` weichen in mindestens einem dieser Punkte voneinander ab.

Syntaxregeln für INI-Dateien

Trotz fehlender formaler Spezifikation folgt die INI-Syntax in praktisch allen Parsern konsistenten Konventionen. Dies sind die Regeln, auf die Sie sich verlassen können, unabhängig davon, was Ihre Datei liest.

Eine INI-Datei ist das denkbar einfachste Konfigurationsformat: Abschnitte in Klammern, darunter Schlüssel-Wert-Paare und Semikolons für Kommentare. Alles andere ist parserspezifisch.

- Informaler Konsens zum INI-Format

Universelle Regeln

  • Ein Schlüssel-Wert-Paar pro Zeile – `key = value` oder `key=value`; das Leerzeichen um `=` ist optional, aber konsistenter Abstand ist lesbar
  • Abschnittsüberschriften – `[Abschnittsname]` allein auf einer Zeile; kein Inhalt nach der schließenden Klammer
  • Kommentarzeilen – beginnen Sie mit `;` für maximale Kompatibilität; `#` wird von einigen Parsern unterstützt (Python `configparser`, Linux-Tools), aber nicht von Windows-nativen APIs
  • Leerzeilen – werden von allen Parsern ignoriert; verwenden Sie sie frei, um logische Gruppen innerhalb eines Abschnitts zu trennen
  • Keine Verschachtelung – INI ist flach: Abschnitte enthalten Schlüssel-Wert-Paare, nicht andere Abschnitte
  • Zeichenkettenwerte – alle Werte sind Zeichenketten, sofern der Parser sie nicht konvertiert; `count = 5` ist für die meisten Parser die Zeichenkette „5“

Was der Parser sieht

Der Parser baut eine zweistufige Map auf: Abschnittsname → Schlüssel → Wert. Hat eine Datei keine Abschnittsüberschriften, liegen die Werte in einem impliziten „Standard“-Abschnitt – Pythons `configparser` nennt ihn `DEFAULT`. Ob der Parser den Standardabschnitt mit benannten Abschnitten verschmilzt, variiert. Schlüssel und Abschnittsnamen werden fast überall per Konvention als case-insensitive behandelt, auch wenn das nicht von allen Implementierungen garantiert wird.

Tip

Validieren Sie Ihre INI-Datei immer mit dem [INI-Validator](/tools/data/validators/ini-validator), bevor Sie sie ausrollen. Häufige stille Fehler – ein Tippfehler in einem Abschnittsnamen, ein doppelter Schlüssel oder ein Wert in derselben Zeile wie eine Abschnittsüberschrift – überstehen eine Sichtprüfung, führen aber dazu, dass der Parser stillschweigend den falschen Wert verwendet.

Ihre erste INI-Datei erstellen

Eine INI-Datei zu erstellen dauert weniger als fünf Schritte. Das einzige benötigte Werkzeug ist ein einfacher Texteditor – jeder Editor, der als UTF-8 oder ASCII ohne Byte-Order-Mark (BOM) speichert, funktioniert korrekt.

1

Erstellen Sie eine neue Textdatei mit der Endung .ini

Öffnen Sie Ihren Texteditor (VS Code, Editor, nano, vim – alle funktionieren) und erstellen Sie eine neue Datei. Speichern Sie sie mit der Endung `.ini`, bevor Sie Inhalt schreiben, damit der Editor, falls verfügbar, INI-Syntaxhervorhebung anwendet. Unter Windows stellen Sie im Editor sicher, dass „Speichern unter – Dateityp“ auf „Alle Dateien“ steht, damit die Datei nicht als `config.ini.txt` statt `config.ini` gespeichert wird.

2

Fügen Sie Ihre erste Abschnittsüberschrift hinzu

Schreiben Sie Ihren ersten Abschnittsnamen in eckigen Klammern auf eine eigene Zeile. Abschnittsnamen sind beschreibende Bezeichner – `[database]`, `[server]`, `[logging]` sind übliche Wahlmöglichkeiten. Sie können auch sofort mit dem Schreiben von Schlüssel-Wert-Paaren beginnen, ganz ohne Abschnittsüberschrift, wenn Ihre Konfiguration einfach genug ist, um keine Gruppierung zu brauchen.

3

Fügen Sie Schlüssel-Wert-Paare unter jedem Abschnitt hinzu

Unter der Abschnittsüberschrift schreiben Sie ein `key = value`-Paar pro Zeile. Schlüssel sollten klein geschrieben sein mit Unterstrichen (snake_case) für maximale parserübergreifende Kompatibilität. Werte dürfen Leerzeichen, Satzzeichen und die meisten Sonderzeichen enthalten. Umschließen Sie Werte nicht mit Anführungszeichen – Anführungszeichen werden von den meisten Parsern als literale Zeichen behandelt, nicht als Zeichenkettenbegrenzer.

4

Fügen Sie Kommentare hinzu, um nicht offensichtliche Werte zu dokumentieren

Beginnen Sie Kommentarzeilen mit einem Semikolon (`;`). Kommentare müssen auf einer eigenen Zeile stehen – ein Kommentar nach einem Wert auf derselben Zeile (`host = localhost ; primary DB`) wird nicht zuverlässig von allen Parsern unterstützt und kann den Kommentartext in den Wert aufnehmen. Wenn Sie Inline-Notizen brauchen, setzen Sie sie auf die vorige Zeile als eigenständigen Kommentar.

5

Validieren Sie die fertige Datei

Fügen Sie Ihre fertige INI-Datei in den INI-Validator ein, um Syntaxfehler, doppelte Abschnittsnamen und Formatkonformität zu prüfen. Der Validator meldet Probleme mit Zeilennummern, damit Sie sie beheben können, bevor die Datei in Produktion geht. Wenn Sie ein konsistentes Format brauchen, laufen Sie sie vorher durch den INI-Formatter.

INI-Validator

Prüfen Sie jede INI- oder CFG-Datei auf Syntaxfehler, doppelte Abschnitte und Formatkonformität – Fehlerberichte auf Zeilenebene ohne Uploads.

Open tool

Abschnitte, Schlüssel und Werte im Detail

Die drei Strukturelemente einer INI-Datei – Abschnitte, Schlüssel und Werte – haben Regeln und Randfälle, die es zu verstehen lohnt, bevor Sie eine Konfiguration schreiben, die vom Parser einer anderen Person gelesen wird.

Namenskonventionen für Abschnitte

Abschnittsnamen stehen in eckigen Klammern und erscheinen auf einer eigenen Zeile. Sie dürfen Buchstaben, Zahlen, Leerzeichen und die meisten Satzzeichen enthalten – aber Leerzeichen in Abschnittsnamen werden von einigen Parsern schlecht unterstützt und sollten vermieden werden. Verwenden Sie `[DatabaseConfig]` oder `[database_config]` statt `[database config]`. Doppelte Abschnittsnamen werden je nach Parser zusammengeführt oder erzeugen einen Fehler – behandeln Sie sie als verboten und validieren Sie mit dem INI-Validator, um Duplikate zu erkennen.

Regeln für Schlüsselnamen

Schlüssel dürfen weder das `=`-Zeichen noch einen Zeilenumbruch enthalten. Darüber hinaus variieren die Konventionen, aber die sicherste Praxis ist, nur Kleinbuchstaben, Ziffern und Unterstriche zu verwenden – dieselben Regeln wie bei Python-Variablennamen. Vermeiden Sie Bindestriche in Schlüsseln, wenn Sie sie in Python mit `configparser` lesen wollen, da Python die Schlüssel unverändert zurückgibt und Schlüssel mit Bindestrich nicht als Attribute zugreifbar sind.

Werttypen und mehrzeilige Werte

Alle Werte in INI-Dateien sind Zeichenketten, sofern Ihr Parser sie nicht explizit konvertiert. `enabled = true` ist die Zeichenkette „true“ – Ihr Code muss sie in einen Booleanschen Wert umwandeln. Pythons `configparser` bietet dafür die Methoden `getboolean()`, `getint()` und `getfloat()`. Mehrzeilige Werte werden von einigen Parsern unterstützt (Pythons `configparser` behandelt Zeilen mit führenden Leerzeichen als Fortsetzung des vorigen Werts), aber nicht von allen – prüfen Sie die Dokumentation Ihres Parsers, bevor Sie sich darauf verlassen.


Der DEFAULT-Abschnitt

Pythons `configparser` behandelt einen Abschnitt namens `[DEFAULT]` (Groß-/Kleinschreibung egal) als speziellen Fallback-Abschnitt. Jeder in `[DEFAULT]` definierte Schlüssel ist in allen anderen Abschnitten als Fallback verfügbar – definiert ein Abschnitt einen Schlüssel nicht, wird stattdessen der Wert aus `[DEFAULT]` zurückgegeben. Dies ist ein Python-spezifisches Verhalten, das in den meisten anderen Parsern nicht existiert. Wenn Sie INI-Dateien speziell für Python schreiben, ist `[DEFAULT]` ein praktischer Weg, geteilte Werte zu definieren, ohne sie in jedem Abschnitt zu wiederholen.

Warning

Legen Sie keine sensiblen Werte – Passwörter, API-Schlüssel, Tokens – in INI-Dateien, die in die Versionskontrolle eingecheckt werden. INI-Dateien sind Klartext und trivial lesbar. Speichern Sie sensible Werte stattdessen in Umgebungsvariablen und referenzieren Sie sie im INI-File namentlich als Hinweis: `password = <DB_PASSWORD>` (beachten Sie, dass die meisten INI-Parser dies als Literalzeichenkette behandeln, nicht als Variablenexpansion).

Kommentare und Kodierung

Kommentare und Zeichenkodierung sind die zwei Aspekte von INI-Dateien, die am ehesten stille Probleme verursachen, wenn Dateien über verschiedene Tools, Betriebssysteme oder Programmiersprachen hinweg geteilt werden.

Kommentarzeichen: ; vs. #

Das Semikolon (`;`) ist das universell unterstützte Kommentarzeichen – es funktioniert in Pythons `configparser`, in Windows-nativen APIs, in PHPs `parse_ini_file()`, in MySQL und in praktisch jedem anderen INI-Parser. Die Raute (`#`) wird von Pythons `configparser` und den meisten Linux-Parsern unterstützt, aber nicht von Windows’ `GetPrivateProfileString()`. Wenn Ihre INI-Datei jemals nur von Python gelesen wird, ist beides sicher. Für plattformübergreifende Dateien verwenden Sie ausschließlich `;`.

Zeichenkodierung: UTF-8 vs. Windows-1252

Speichern Sie INI-Dateien für moderne Tools als UTF-8 ohne BOM. Das BOM (Byte-Order-Mark, das unsichtbare `\uFEFF`-Zeichen am Anfang mancher von Windows-Tools gespeicherter UTF-8-Dateien) bereitet Problemen mit Parsern, die es als Teil des ersten Schlüsselnamens behandeln. Pythons `configparser` verarbeitet UTF-8 seit Python 3 nativ. Wenn Sie eine INI-Datei für eine ältere Windows-Anwendung schreiben, die Windows-1252-Kodierung erwartet, richten Sie sich nach der Anwendung – gemischte Kodierungen sind eine häufige Quelle für Zeichencorruption in Werten.

Zeilenenden

INI-Dateien funktionieren sowohl mit Windows- (CRLF, `\r\n`) als auch Unix-Zeilenenden (LF, `\n`). Verwenden Sie die Konvention der Zielplattform. Wenn Sie eine INI-Datei unter Windows bearbeiten, die unter Linux deployed wird, stellen Sie Ihren Editor auf LF-Zeilenenden ein, damit das Wagenrücklaufzeichen nicht in Werten auf Linux-Parsern auftaucht. Der INI-Formatter normalisiert Zeilenenden und Abstände in einem Durchgang.

INI-Dateien im Code lesen

Die meisten Sprachen bieten einen integrierten oder Standardbibliotheks-Parser für INI-Dateien. Hier sind die Standardansätze für die gängigsten Umgebungen.

Python: configparser

Pythons Modul `configparser` ist der Standardweg, INI-Dateien in Python zu lesen. Importieren Sie es, erstellen Sie eine `ConfigParser()`-Instanz, rufen Sie `.read()` mit Ihrem Dateinamen auf und greifen Sie auf Werte mit `config["Abschnittsname"]["schlüssel"]` oder `config.get("Abschnittsname", "schlüssel")` zu. Die Methode `.get()` akzeptiert ein `fallback`-Argument, das bei fehlendem Schlüssel einen Standardwert zurückgibt – nützlich für optionale Konfigurationswerte. Verwenden Sie `getboolean()`, `getint()` und `getfloat()` für typisierte Werte, statt Strings manuell zu casten.

PHP: parse_ini_file()

PHP bietet `parse_ini_file($filename, $process_sections)` als eingebaute Funktion. Mit `$process_sections = true` gibt die Funktion ein verschachteltes assoziatives Array zurück, nach Abschnittsnamen organisiert. Mit `false` gibt sie ein flaches Array mit allen verschmolzenen Schlüsseln zurück. Der PHP-Parser ist streng bei bestimmten Sonderzeichen in nicht quotierten Werten – Werte mit =, öffnende/schließende Klammern, |, &, ~, !, [, ] müssen in der INI-Datei in Anführungszeichen stehen, um korrekt geparst zu werden.

Node.js und andere Umgebungen

Node.js hat keinen integrierten INI-Parser, aber das npm-Paket `ini` (MIT-Lizenz) bietet eine standardmäßige `parse()`- und `stringify()`-Schnittstelle. Für Java ist `org.ini4j` die Standardwahl. Für Go ist das Paket `gopkg.in/ini.v1` die am weitesten verbreitete Option. In jedem Fall verarbeitet die Bibliothek dieselbe zweistufige Abschnitt/Schlüssel-Struktur – die API-Formen variieren, aber das zugrunde liegende Format ist identisch.

Tip

Wenn Sie eine INI-Konfigurationsdatei in ein modernes Format migrieren müssen, konvertiert der [INI-zu-YAML-Konverter](/tools/data/converters/ini-to-yaml) Ihre INI-Datei sofort in wohlstrukturiertes YAML – direkt im Browser. Für Rust- oder Python-Paketierungsprojekte mit modernem Tooling ziehen Sie TOML in Betracht – der [TOML-Validator](/tools/data/validators/toml-validator) hilft Ihnen, das konvertierte Ergebnis zu prüfen.

INI vs. TOML vs. YAML

INI ist nicht immer das richtige Konfigurationsformat. Zu verstehen, wo es passt – und wo TOML oder YAML die bessere Wahl ist – hilft Ihnen, für neue Projekte die richtige Entscheidung zu treffen.

MerkmalINITOMLYAML
SyntaxkomplexitätMinimalModeratHoch
Native Typunterstützung✗ Nur Zeichenketten✓ Volle Typen✓ Volle Typen
Verschachtelte Strukturen✗ Max. zwei Ebenen✓ Inline-Tabellen✓ Unbegrenzte Tiefe
Arrays / Listen✗ Nicht standardisiert✓ Native Arrays✓ Blocksequenzen
Kommentare✓ ; und #✓ Nur #✓ Nur #
Formale Spezifikation✗ Keine offizielle Spezifikation✓ TOML-Spezifikation✓ YAML-1.2-Spezifikation
Am besten fürEinfache App-KonfigurationRust, Python-PaketeDevOps, Kubernetes
LesbarkeitSehr hochHochMittel (einzugsabhängig)

Wann Sie INI verwenden

INI ist die richtige Wahl, wenn Ihre Konfiguration zwei Ebenen tief ist (Abschnitte und flache Schlüssel-Wert-Paare), wenn der Ziel-Parser bereits INI erwartet (PHP, Python-Ökosystem, MySQL, Git) und wenn Sie das denkbar einfachste Format wollen, das jeder Entwickler ohne Vorwissen lesen kann. Nicht geeignet ist es für Konfigurationen, die Arrays, verschachtelte Objekte oder typisierte Daten benötigen.

Wann Sie stattdessen TOML oder YAML verwenden

Wählen Sie TOML, wenn Ihre Konfiguration typisierte Werte, Arrays oder Inline-Tabellen braucht und Sie eine strenge Spezifikation mit vorhersagbarem Parsing wünschen. TOML ist das Format für `pyproject.toml`, `Cargo.toml` und Hugos Konfigurationsdateien. Wählen Sie YAML, wenn Sie tief verschachtelte Strukturen brauchen oder in einem Ökosystem arbeiten, in dem YAML bereits Standard ist – Kubernetes, GitHub Actions, Docker Compose und Ansible sind allesamt YAML-first-Umgebungen.

Key takeaways

  • Eine INI-Datei ist eine Klartext-Konfigurationsdatei mit benannten Abschnitten in `[Klammern]` und `key = value`-Paaren darunter.
  • Verwenden Sie `;` für Kommentare – nicht `#` – für maximale Kompatibilität unter Windows, PHP, Python und anderen INI-Parsern.
  • Speichern Sie INI-Dateien als UTF-8 ohne BOM; vermeiden Sie Inline-Kommentare (nach einem Wert in derselben Zeile), da sie nicht universell unterstützt werden.
  • Alle INI-Werte sind Zeichenketten, sofern Ihr Parser sie nicht explizit konvertiert – nutzen Sie `getboolean()`, `getint()` und `getfloat()` in Python.
  • Speichern Sie niemals Passwörter oder API-Schlüssel in INI-Dateien, die in die Versionskontrolle eingecheckt werden – verwenden Sie Umgebungsvariablen für sensible Werte.
  • Validieren Sie vor dem Deployment mit dem INI-Validator, um Syntaxfehler, doppelte Abschnitte und Formatprobleme zu finden.
  • Verwenden Sie TOML für Konfigurationen mit typisierten Werten und Arrays; verwenden Sie YAML für tief verschachtelte Strukturen – INI ist nur für einfache zweistufige Konfigurationen ideal.

Häufige Fragen

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