Saltar al contenido
Aback Tools Logo

Cómo Crear un Archivo INI: Reglas de Sintaxis, Secciones y Parsers

Cómo crear un archivo INI: reglas de sintaxis universales, convenciones de nombres de secciones y claves, trampas de comentarios y codificación, diferencias entre parsers de Python, PHP y Windows, y cuándo usar INI vs TOML o YAML.

DH
Tutorials & How-Tos11 min de lectura2,550 palabras

El formato de archivo INI se usa para almacenar ajustes de aplicaciones desde los primeros días de Windows, y sigue en uso activo en proyectos Python, configuraciones PHP, MySQL, Git y decenas de otras herramientas. Crear uno correctamente requiere entender unas pocas reglas de sintaxis, saber dónde varían los parsers en su comportamiento y elegir el formato adecuado para tu caso de uso. Esta guía cubre todo — desde la primera línea hasta la validación.

1983Origen del formatoera de Microsoft Windows 1.x
0Librerías especialestexto plano, sirve cualquier editor
2 nivelesProfundidad nativa máx.secciones + pares clave-valor

¿Qué es un archivo INI?

Un archivo INI es un archivo de configuración de texto plano que almacena ajustes como pares clave-valor, opcionalmente agrupados en secciones con nombre. El nombre viene de «initialisation» (inicialización) — los archivos INI se usaban para inicializar aplicaciones de Windows con sus ajustes antes de que existiera el Registro de Windows. El formato nunca tuvo una especificación formal, pero surgió un estándar de facto por su uso generalizado.

Dónde se usan hoy los archivos INI

  • Empaquetado Python — `setup.cfg`, `tox.ini`, `pytest.ini`, `mypy.ini`, `.flake8`
  • Tiempo de ejecución PHP — `php.ini` controla globalmente los ajustes del intérprete PHP
  • MySQL / MariaDB — `my.ini` (Windows) y `my.cnf` (Unix) configuran el servidor de base de datos
  • Git — `.gitconfig` y `.git/config` usan un formato tipo INI para ajustes de repositorio y usuario
  • Wine — `wine.inf` configura la capa de compatibilidad de Windows en Linux y macOS
  • Aplicaciones Windows — miles de aplicaciones de escritorio antiguas y modernas guardan preferencias en archivos `.ini` en la carpeta AppData

INI frente al Registro de Windows

Microsoft trasladó los ajustes de las aplicaciones Windows al Registro a principios de los años 90 por razones de rendimiento y gestión centralizada. Sin embargo, muchos desarrolladores siguen prefiriendo los archivos INI por su portabilidad — un archivo INI puede inspeccionarse y editarse con cualquier editor de texto, comprometerse a un control de versiones y copiarse entre máquinas sin herramientas de exportación/importación. El Registro no puede.

Note

Como INI no tiene especificación formal, distintos parsers implementan reglas ligeramente diferentes para casos límite: si # es un carácter de comentario válido, si se permiten comentarios en línea y cómo se manejan las claves duplicadas. El `configparser` de Python, `GetPrivateProfileString` de Windows y `parse_ini_file()` de PHP difieren en al menos uno de estos puntos.

Reglas de sintaxis de los archivos INI

A pesar de la falta de una especificación formal, la sintaxis INI sigue convenciones consistentes en prácticamente todos los parsers. Estas son las reglas en las que puedes confiar sin importar qué lea tu archivo.

Un archivo INI es el formato de configuración más simple posible: secciones entre corchetes, pares clave-valor debajo y punto y coma para comentarios. Todo lo demás es específico del parser.

- Consenso informal del formato INI

Reglas universales

  • Un par clave-valor por línea — `key = value` o `key=value`; el espacio alrededor de `=` es opcional pero el espaciado consistente es legible
  • Encabezados de sección — `[NombreSección]` en su propia línea; sin contenido tras el corchete de cierre
  • Líneas de comentario — empiezan con `;` para máxima compatibilidad; `#` lo soportan algunos parsers (`configparser` de Python, herramientas Linux) pero no las APIs nativas de Windows
  • Líneas en blanco — ignoradas por todos los parsers; úsalas libremente para separar grupos lógicos dentro de una sección
  • Sin anidamiento — INI es plano: las secciones contienen pares clave-valor, no otras secciones
  • Valores de cadena — todos los valores son cadenas salvo que el parser los convierta; `count = 5` es la cadena "5" para la mayoría de los parsers

Lo que ve el parser

El parser construye un mapa de dos niveles: nombre de sección → clave → valor. Si un archivo no tiene encabezados de sección, los valores están en una sección implícita «por defecto» — el `configparser` de Python la llama `DEFAULT`. Que el parser fusione la sección por defecto con las secciones con nombre varía. Las claves y nombres de sección se tratan casi universalmente como insensibles a mayúsculas por convención, aunque no está garantizado por todas las implementaciones.

Tip

Valida siempre tu archivo INI con el [Validador INI](/tools/data/validators/ini-validator) antes de desplegarlo. Errores silenciosos comunes — un error tipográfico en un nombre de sección, una clave duplicada o un valor en la misma línea que un encabezado de sección — pasarán una revisión visual pero harán que el parser use silenciosamente el valor incorrecto.

Crear tu primer archivo INI

Crear un archivo INI toma menos de cinco pasos. La única herramienta necesaria es un editor de texto plano — cualquier editor que guarde como UTF-8 o ASCII sin marca de orden de bytes (BOM) funciona correctamente.

1

Crea un nuevo archivo de texto con extensión .ini

Abre tu editor de texto (VS Code, Bloc de notas, nano, vim — cualquiera funciona) y crea un archivo nuevo. Guárdalo con la extensión `.ini` antes de escribir contenido para que el editor aplique resaltado de sintaxis INI si está disponible. En Windows, asegúrate de que «Guardar como tipo» esté en «Todos los archivos» en el Bloc de notas para evitar que el archivo se guarde como `config.ini.txt` en lugar de `config.ini`.

2

Añade tu primer encabezado de sección

Escribe tu primer nombre de sección entre corchetes en su propia línea. Los nombres de sección son etiquetas descriptivas — `[database]`, `[server]`, `[logging]` son elecciones convencionales. También puedes empezar a escribir pares clave-valor inmediatamente sin ningún encabezado de sección si tu configuración es lo bastante simple como para no necesitar agrupación.

3

Añade pares clave-valor bajo cada sección

Debajo del encabezado de sección, escribe un par `key = value` por línea. Las claves deben ir en minúsculas con guiones bajos (snake_case) para máxima compatibilidad entre parsers. Los valores pueden incluir espacios, puntuación y la mayoría de caracteres especiales. No envuelvas los valores entre comillas — las comillas se tratan como caracteres literales por la mayoría de parsers, no como delimitadores de cadena.

4

Añade comentarios para documentar valores no evidentes

Empieza las líneas de comentario con punto y coma (`;`). Los comentarios deben estar en su propia línea dedicada — colocar un comentario después de un valor en la misma línea (`host = localhost ; primary DB`) no está soportado de forma fiable por todos los parsers y puede incluir el texto del comentario en el valor. Si necesitas notas en línea, ponlas en la línea precedente como comentario independiente.

5

Valida el archivo terminado

Pega tu archivo INI completado en el Validador INI para comprobar errores de sintaxis, nombres de sección duplicados y cumplimiento del formato. El validador reporta los problemas con números de línea para que puedas corregirlos antes de poner el archivo en producción. Si necesitas formato consistente, pásalo primero por el Formateador INI.

Validador INI

Comprueba cualquier archivo INI o CFG en busca de errores de sintaxis, secciones duplicadas y cumplimiento del formato — informes de error a nivel de línea sin necesidad de subidas.

Open tool

Secciones, claves y valores en profundidad

Los tres elementos estructurales de un archivo INI — secciones, claves y valores — tienen reglas y casos límite que vale la pena entender antes de escribir una configuración que será leída por el parser de otra persona.

Convenciones de nombres de sección

Los nombres de sección van entre corchetes y aparecen en su propia línea. Pueden contener letras, números, espacios y la mayoría de la puntuación — pero los espacios en nombres de sección están pobremente soportados por algunos parsers y deben evitarse. Usa `[DatabaseConfig]` o `[database_config]` en lugar de `[database config]`. Los nombres de sección duplicados se fusionan o causan un error según el parser — trátalos como prohibidos y valida con el Validador INI para detectar duplicados.

Reglas de nombres de claves

Las claves no deben contener el signo `=` ni un salto de línea. Más allá de eso, las convenciones varían, pero la práctica más segura es usar solo letras minúsculas, dígitos y guiones bajos — las mismas reglas que los nombres de variables de Python. Evita los guiones en las claves si planeas leerlas en Python con `configparser`, ya que Python devuelve las claves tal cual y las claves con guiones no pueden accederse como atributos.

Tipos de valor y valores multilínea

Todos los valores en archivos INI son cadenas salvo que tu parser los convierta explícitamente. `enabled = true` es la cadena "true" — tu código debe convertirla a un booleano. El `configparser` de Python proporciona los métodos `getboolean()`, `getint()` y `getfloat()` para este propósito. Los valores multilínea están soportados por algunos parsers (el `configparser` de Python trata las líneas con espacios iniciales como continuaciones del valor anterior) pero no todos — consulta la documentación de tu parser antes de confiar en esto.


La sección DEFAULT

El `configparser` de Python trata una sección llamada `[DEFAULT]` (insensible a mayúsculas) como una sección especial de respaldo. Cualquier clave definida en `[DEFAULT]` está disponible en todas las demás secciones como respaldo — si una sección no define una clave, se devuelve el valor de `[DEFAULT]`. Es un comportamiento específico de Python que no se encuentra en la mayoría de otros parsers. Si escribes archivos INI específicamente para Python, `[DEFAULT]` es una forma útil de definir valores compartidos sin repetirlos en cada sección.

Warning

No pongas valores sensibles — contraseñas, claves API, tokens — en archivos INI que se vayan a comprometer al control de versiones. Los archivos INI son texto plano y trivialmente legibles. Almacena los valores sensibles en variables de entorno y referéncialos por nombre en el archivo INI como pista: `password = <DB_PASSWORD>` (observando que la mayoría de parsers INI tratarán esto como la cadena literal, no como una expansión de variable).

Comentarios y codificación

Los comentarios y la codificación de caracteres son los dos aspectos de los archivos INI con más probabilidad de causar problemas silenciosos cuando los archivos se comparten entre distintas herramientas, sistemas operativos o lenguajes de programación.

Caracteres de comentario: ; frente a #

El punto y coma (`;`) es el carácter de comentario universalmente soportado — funciona en el `configparser` de Python, las APIs nativas de Windows, `parse_ini_file()` de PHP, MySQL y prácticamente cualquier otro parser INI. La almohadilla (`#`) está soportada por el `configparser` de Python y la mayoría de parsers basados en Linux, pero no por `GetPrivateProfileString()` de Windows. Si tu archivo INI solo lo leerá Python, cualquier carácter es seguro. Para archivos multiplataforma, usa exclusivamente `;`.

Codificación de caracteres: UTF-8 frente a Windows-1252

Guarda los archivos INI como UTF-8 sin BOM para herramientas modernas. El BOM (marca de orden de bytes, el carácter invisible `\uFEFF` al inicio de algunos archivos UTF-8 guardados por herramientas de Windows) causa problemas con parsers que lo tratan como parte del primer nombre de clave. El `configparser` de Python maneja UTF-8 de forma nativa desde Python 3. Si escribes un archivo INI para una aplicación Windows heredada que espera codificación Windows-1252, ajusta lo que la aplicación espera — mezclar codificaciones es una fuente común de corrupción de caracteres en los valores.

Finales de línea

Los archivos INI funcionan tanto con finales de línea de Windows (CRLF, `\r\n`) como de Unix (LF, `\n`). Usa la convención de finales de línea de tu plataforma destino. Si editas un archivo INI en Windows para despliegue en Linux, configura tu editor de texto para guardar con finales de línea LF y evitar que el carácter de retorno de carro aparezca en los valores en parsers Linux. El Formateador INI normaliza finales de línea y espaciado en una sola pasada.

Leer archivos INI en código

La mayoría de los lenguajes proporcionan un parser integrado o de biblioteca estándar para archivos INI. Aquí están los enfoques estándar para los entornos más comunes.

Python: configparser

El módulo `configparser` de Python es la forma estándar de leer archivos INI en Python. Impórtalo, crea una instancia `ConfigParser()`, llama a `.read()` con tu nombre de archivo y accede a los valores con `config["NombreSección"]["clave"]` o `config.get("NombreSección", "clave")`. El método `.get()` acepta un argumento `fallback` que devuelve un valor por defecto cuando falta la clave — útil para valores de configuración opcionales. Usa `getboolean()`, `getint()` y `getfloat()` para valores tipados en lugar de convertir cadenas manualmente.

PHP: parse_ini_file()

PHP proporciona `parse_ini_file($filename, $process_sections)` como función integrada. Con `$process_sections = true`, la función devuelve un array asociativo anidado organizado por nombre de sección. Con `false`, devuelve un array plano con todas las claves fusionadas. El parser de PHP es estricto con ciertos caracteres especiales en valores sin comillas — valores que contengan =, llaves de apertura/cierre, |, &, ~, !, [, ] deben ir entre comillas en el archivo INI para parsearse correctamente.

Node.js y otros entornos

Node.js no tiene un parser INI integrado, pero el paquete npm `ini` (licencia MIT) proporciona una interfaz estándar `parse()` y `stringify()`. Para Java, la librería `org.ini4j` es la elección estándar. Para Go, el paquete `gopkg.in/ini.v1` es la opción más usada. En cada caso, la librería maneja la misma estructura de dos niveles sección/clave — las formas de la API varían pero el formato subyacente es idéntico.

Tip

Si necesitas migrar un archivo de configuración INI a un formato moderno, el [Convertidor INI a YAML](/tools/data/converters/ini-to-yaml) convierte tu archivo INI a YAML bien estructurado instantáneamente en tu navegador. Para proyectos de empaquetado Rust o Python que adopten herramientas modernas, considera TOML — el [Validador TOML](/tools/data/validators/toml-validator) te ayuda a verificar el resultado convertido.

INI vs TOML vs YAML

INI no siempre es el formato de configuración correcto. Entender dónde encaja — y dónde TOML o YAML es una mejor elección — te ayuda a tomar la decisión correcta para nuevos proyectos.

CaracterísticaINITOMLYAML
Complejidad de sintaxisMínimaModeradaAlta
Soporte nativo de tipos✗ Solo cadenas✓ Tipos completos✓ Tipos completos
Estructuras anidadas✗ Dos niveles máx.✓ Tablas en línea✓ Profundidad ilimitada
Arrays / listas✗ No estándar✓ Arrays nativos✓ Secuencias en bloque
Comentarios✓ ; y #✓ Solo #✓ Solo #
Especificación formal✗ Sin especificación oficial✓ Especificación TOML✓ Especificación YAML 1.2
Mejor paraConfig simple de appsRust, paquetes PythonDevOps, Kubernetes
LegibilidadMuy altaAltaMedia (sensible a indentación)

Cuándo usar INI

INI es la elección correcta cuando tu configuración tiene dos niveles de profundidad (secciones y pares clave-valor planos), cuando el parser destino ya espera formato INI (PHP, ecosistema Python, MySQL, Git) y cuando quieres el formato más simple posible que cualquier desarrollador pueda leer sin conocimiento previo. No es apropiado para configuraciones que necesiten arrays, objetos anidados o datos tipados.

Cuándo usar TOML o YAML en su lugar

Elige TOML cuando tu configuración necesite valores tipados, arrays o tablas en línea y quieras una especificación estricta con parsing predecible. TOML es el formato de `pyproject.toml`, `Cargo.toml` y los archivos de configuración de Hugo. Elige YAML cuando necesites estructuras profundamente anidadas o trabajes en un ecosistema donde YAML ya es estándar — Kubernetes, GitHub Actions, Docker Compose y Ansible son entornos YAML-first.

Key takeaways

  • Un archivo INI es un archivo de configuración de texto plano con secciones con nombre en `[corchetes]` y pares `key = value` debajo.
  • Usa `;` para comentarios — no `#` — para máxima compatibilidad entre Windows, PHP, Python y otros parsers INI.
  • Guarda los archivos INI como UTF-8 sin BOM; evita comentarios en línea (tras un valor en la misma línea) ya que no están universalmente soportados.
  • Todos los valores INI son cadenas salvo que tu parser los convierta explícitamente — usa `getboolean()`, `getint()` y `getfloat()` en Python.
  • Nunca almacenes contraseñas ni claves API en archivos INI comprometidos al control de versiones — usa variables de entorno para valores sensibles.
  • Valida con el Validador INI antes del despliegue para detectar errores de sintaxis, secciones duplicadas y problemas de formato.
  • Usa TOML para configuraciones que necesiten valores tipados y arrays; usa YAML para estructuras profundamente anidadas — INI es ideal solo para configuraciones simples de dos niveles.

Preguntas frecuentes

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