Pular para o conteúdo
Aback Tools Logo

Como Criar um Ficheiro INI: Regras de Sintaxe, Secções e Parsers

Como criar um ficheiro INI: regras de sintaxe universais, convenções de nomes de secções e chaves, armadilhas de comentários e codificação, diferenças entre parsers de Python, PHP e Windows, e quando usar INI vs TOML ou YAML.

DH
Tutorials & How-Tos11 min de leitura2,550 palavras

O formato de ficheiro INI é usado para armazenar definições de aplicações desde os primeiros dias do Windows, e continua em uso ativo em projetos Python, configurações PHP, MySQL, Git e dezenas de outras ferramentas. Criar um corretamente exige entender algumas regras de sintaxe, saber onde os parsers variam no seu comportamento e escolher o formato certo para o seu caso de uso. Este guia cobre tudo — desde a primeira linha até à validação.

1983Origem do formatoera do Microsoft Windows 1.x
0Bibliotecas especiaistexto simples, qualquer editor serve
2 níveisProfundidade nativa máx.secções + pares chave-valor

O que é um ficheiro INI?

Um ficheiro INI é um ficheiro de configuração de texto simples que armazena definições como pares chave-valor, opcionalmente agrupados em secções nomeadas. O nome vem de «initialisation» (inicialização) — os ficheiros INI eram usados para inicializar aplicações Windows com as suas definições antes de existir o Registo do Windows. O formato nunca teve uma especificação formal, mas um padrão de facto surgiu do uso generalizado.

Onde os ficheiros INI são usados hoje

  • Empacotamento Python — `setup.cfg`, `tox.ini`, `pytest.ini`, `mypy.ini`, `.flake8`
  • Execução PHP — `php.ini` controla globalmente as definições do interpretador PHP
  • MySQL / MariaDB — `my.ini` (Windows) e `my.cnf` (Unix) configuram o servidor de base de dados
  • Git — `.gitconfig` e `.git/config` usam um formato tipo INI para definições de repositório e utilizador
  • Wine — `wine.inf` configura a camada de compatibilidade do Windows em Linux e macOS
  • Aplicações Windows — milhares de aplicações de ambiente de trabalho antigas e modernas guardam preferências em ficheiros `.ini` na pasta AppData

INI frente ao Registo do Windows

A Microsoft transferiu as definições das aplicações Windows para o Registo no início da década de 1990 por razões de desempenho e gestão centralizada. No entanto, muitos programadores continuam a preferir os ficheiros INI pela portabilidade — um ficheiro INI pode ser inspecionado e editado com qualquer editor de texto, submetido a controlo de versões e copiado entre máquinas sem qualquer ferramenta de exportação/importação. O Registo não pode.

Note

Como o INI não tem especificação formal, diferentes parsers implementam regras ligeiramente diferentes para casos extremos: se # é um carácter de comentário válido, se são permitidos comentários em linha e como as chaves duplicadas são tratadas. O `configparser` de Python, o `GetPrivateProfileString` do Windows e o `parse_ini_file()` do PHP divergem em pelo menos um destes pontos.

Regras de sintaxe dos ficheiros INI

Apesar da falta de uma especificação formal, a sintaxe INI segue convenções consistentes em praticamente todos os parsers. Estas são as regras em que pode confiar independentemente do que leia o seu ficheiro.

Um ficheiro INI é o formato de configuração mais simples possível: secções entre parênteses retos, pares chave-valor por baixo e ponto e vírgula para comentários. Todo o resto é específico do parser.

- Consenso informal do formato INI

Regras universais

  • Um par chave-valor por linha — `key = value` ou `key=value`; o espaço à volta de `=` é opcional mas o espaçamento consistente é legível
  • Cabeçalhos de secção — `[NomeSecção]` na sua própria linha; sem conteúdo após o parêntese reto de fecho
  • Linhas de comentário — começam com `;` para máxima compatibilidade; `#` é suportado por alguns parsers (`configparser` de Python, ferramentas Linux) mas não pelas APIs nativas do Windows
  • Linhas em branco — ignoradas por todos os parsers; use-as livremente para separar grupos lógicos dentro de uma secção
  • Sem aninhamento — o INI é plano: as secções contêm pares chave-valor, não outras secções
  • Valores de cadeia — todos os valores são cadeias salvo se o parser os converter; `count = 5` é a cadeia "5" para a maioria dos parsers

O que o parser vê

O parser constrói um mapa de dois níveis: nome de secção → chave → valor. Se um ficheiro não tiver cabeçalhos de secção, os valores ficam numa secção implícita «predefinida» — o `configparser` de Python chama-lhe `DEFAULT`. Se o parser funde a secção predefinida com as secções nomeadas varia. As chaves e nomes de secção são tratados quase universalmente como insensíveis a maiúsculas por convenção, embora isto não seja garantido por todas as implementações.

Tip

Valide sempre o seu ficheiro INI com o [Validador INI](/tools/data/validators/ini-validator) antes de o implementar. Erros silenciosos comuns — um erro tipográfico num nome de secção, uma chave duplicada ou um valor na mesma linha que um cabeçalho de secção — passarão numa revisão visual mas farão o parser usar silenciosamente o valor errado.

Criar o seu primeiro ficheiro INI

Criar um ficheiro INI leva menos de cinco passos. A única ferramenta necessária é um editor de texto simples — qualquer editor que guarde como UTF-8 ou ASCII sem marca de ordem de bytes (BOM) funciona corretamente.

1

Crie um novo ficheiro de texto com a extensão .ini

Abra o seu editor de texto (VS Code, Bloco de Notas, nano, vim — qualquer um funciona) e crie um novo ficheiro. Guarde-o com a extensão `.ini` antes de escrever conteúdo para que o editor aplique o realce de sintaxe INI se disponível. No Windows, certifique-se de que «Guardar como tipo» está definido como «Todos os ficheiros» no Bloco de Notas para evitar que o ficheiro seja guardado como `config.ini.txt` em vez de `config.ini`.

2

Adicione o seu primeiro cabeçalho de secção

Escreva o seu primeiro nome de secção entre parênteses retos na sua própria linha. Os nomes de secção são rótulos descritivos — `[database]`, `[server]`, `[logging]` são escolhas convencionais. Também pode começar a escrever pares chave-valor imediatamente sem qualquer cabeçalho de secção se a sua configuração for suficientemente simples para não precisar de agrupamento.

3

Adicione pares chave-valor sob cada secção

Por baixo do cabeçalho de secção, escreva um par `key = value` por linha. As chaves devem ser minúsculas com sublinhados (snake_case) para máxima compatibilidade entre parsers. Os valores podem incluir espaços, pontuação e a maioria dos caracteres especiais. Não envolva os valores entre aspas — as aspas são tratadas como caracteres literais pela maioria dos parsers, não como delimitadores de cadeia.

4

Adicione comentários para documentar valores não óbvios

Comece as linhas de comentário com ponto e vírgula (`;`). Os comentários devem estar na sua própria linha dedicada — colocar um comentário após um valor na mesma linha (`host = localhost ; primary DB`) não é suportado de forma fiável por todos os parsers e pode incluir o texto do comentário no valor. Se precisar de notas em linha, ponha-as na linha precedente como comentário autónomo.

5

Valide o ficheiro terminado

Cole o seu ficheiro INI concluído no Validador INI para verificar erros de sintaxe, nomes de secção duplicados e conformidade do formato. O validador reporta os problemas com números de linha para que possa corrigi-los antes de pôr o ficheiro em produção. Se precisar de formatação consistente, passe-o primeiro pelo Formatador INI.

Validador INI

Verifique qualquer ficheiro INI ou CFG quanto a erros de sintaxe, secções duplicadas e conformidade do formato — relatórios de erro ao nível da linha sem necessidade de envios.

Open tool

Secções, chaves e valores em profundidade

Os três elementos estruturais de um ficheiro INI — secções, chaves e valores — têm regras e casos extremos que vale a pena entender antes de escrever uma configuração que será lida pelo parser de outra pessoa.

Convenções de nomes de secção

Os nomes de secção vão entre parênteses retos e aparecem na sua própria linha. Podem conter letras, números, espaços e a maioria da pontuação — mas os espaços em nomes de secção são pouco suportados por alguns parsers e devem ser evitados. Use `[DatabaseConfig]` ou `[database_config]` em vez de `[database config]`. Nomes de secção duplicados são fundidos ou causam um erro dependendo do parser — trate-os como proibidos e valide com o Validador INI para detetar duplicados.

Regras de nomes de chaves

As chaves não devem conter o sinal `=` nem uma nova linha. Para além disso, as convenções variam, mas a prática mais segura é usar apenas letras minúsculas, dígitos e sublinhados — as mesmas regras dos nomes de variáveis Python. Evite hífenes nas chaves se planeia lê-las em Python com `configparser`, já que Python devolve as chaves como estão e chaves com hífen não podem ser acedidas como atributos.

Tipos de valor e valores multilinha

Todos os valores em ficheiros INI são cadeias salvo se o seu parser os converter explicitamente. `enabled = true` é a cadeia "true" — o seu código deve convertê-la num booleano. O `configparser` de Python fornece os métodos `getboolean()`, `getint()` e `getfloat()` para este propósito. Os valores multilinha são suportados por alguns parsers (o `configparser` de Python trata linhas com espaços iniciais como continuações do valor anterior) mas não todos — consulte a documentação do seu parser antes de confiar nisto.


A secção DEFAULT

O `configparser` de Python trata uma secção chamada `[DEFAULT]` (insensível a maiúsculas) como uma secção especial de recurso. Qualquer chave definida em `[DEFAULT]` está disponível em todas as outras secções como recurso — se uma secção não define uma chave, o valor de `[DEFAULT]` é devolvido. Este é um comportamento específico de Python não encontrado na maioria dos outros parsers. Se escreve ficheiros INI especificamente para Python, `[DEFAULT]` é uma forma útil de definir valores partilhados sem repeti-los em cada secção.

Warning

Não ponha valores sensíveis — palavras-passe, chaves de API, tokens — em ficheiros INI que serão submetidos ao controlo de versões. Os ficheiros INI são texto simples e trivialmente legíveis. Armazene os valores sensíveis em variáveis de ambiente e referencie-os por nome no ficheiro INI como dica: `password = <DB_PASSWORD>` (notando que a maioria dos parsers INI tratará isto como a cadeia literal, não como uma expansão de variável).

Comentários e codificação

Os comentários e a codificação de caracteres são os dois aspetos dos ficheiros INI com maior probabilidade de causar problemas silenciosos quando os ficheiros são partilhados entre ferramentas, sistemas operativos ou linguagens diferentes.

Caracteres de comentário: ; vs #

O ponto e vírgula (`;`) é o carácter de comentário universalmente suportado — funciona no `configparser` de Python, nas APIs nativas do Windows, no `parse_ini_file()` do PHP, no MySQL e em praticamente qualquer outro parser INI. O cardinal (`#`) é suportado pelo `configparser` de Python e pela maioria dos parsers baseados em Linux, mas não pelo `GetPrivateProfileString()` do Windows. Se o seu ficheiro INI só será lido por Python, qualquer carácter é seguro. Para ficheiros multiplataforma, use exclusivamente `;`.

Codificação de caracteres: UTF-8 vs Windows-1252

Guarde os ficheiros INI como UTF-8 sem BOM para ferramentas modernas. O BOM (marca de ordem de bytes, o carácter invisível `\uFEFF` no início de alguns ficheiros UTF-8 guardados por ferramentas do Windows) causa problemas com parsers que o tratam como parte do primeiro nome de chave. O `configparser` de Python lida com UTF-8 nativamente desde o Python 3. Se escreve um ficheiro INI para uma aplicação Windows antiga que espera codificação Windows-1252, alinhe com o que a aplicação espera — misturar codificações é uma fonte comum de corrupção de caracteres nos valores.

Fins de linha

Os ficheiros INI funcionam tanto com fins de linha do Windows (CRLF, `\r\n`) como do Unix (LF, `\n`). Use a convenção de fins de linha da sua plataforma destino. Se edita um ficheiro INI no Windows para implementação em Linux, configure o seu editor de texto para guardar com fins de linha LF para evitar que o carácter de retorno de carro apareça nos valores em parsers Linux. O Formatador INI normaliza fins de linha e espaçamento numa única passagem.

Ler ficheiros INI em código

A maioria das linguagens fornece um parser integrado ou de biblioteca padrão para ficheiros INI. Aqui estão as abordagens padrão para os ambientes mais comuns.

Python: configparser

O módulo `configparser` de Python é a forma padrão de ler ficheiros INI em Python. Importe-o, crie uma instância `ConfigParser()`, chame `.read()` com o seu nome de ficheiro e aceda aos valores com `config["NomeSecção"]["chave"]` ou `config.get("NomeSecção", "chave")`. O método `.get()` aceita um argumento `fallback` que devolve um valor predefinido quando a chave falta — útil para valores de configuração opcionais. Use `getboolean()`, `getint()` e `getfloat()` para valores tipados em vez de converter cadeias manualmente.

PHP: parse_ini_file()

O PHP fornece `parse_ini_file($filename, $process_sections)` como função integrada. Com `$process_sections = true`, a função devolve um array associativo aninhado organizado por nome de secção. Com `false`, devolve um array plano com todas as chaves fundidas. O parser do PHP é rigoroso quanto a certos caracteres especiais em valores sem aspas — valores contendo =, chavetas de abertura/fecho, |, &, ~, !, [, ] precisam de estar entre aspas no ficheiro INI para serem parseados corretamente.

Node.js e outros ambientes

O Node.js não tem um parser INI integrado, mas o pacote npm `ini` (licença MIT) fornece uma interface padrão `parse()` e `stringify()`. Para Java, a biblioteca `org.ini4j` é a escolha padrão. Para Go, o pacote `gopkg.in/ini.v1` é a opção mais usada. Em cada caso, a biblioteca lida com a mesma estrutura de dois níveis secção/chave — as formas da API variam mas o formato subjacente é idêntico.

Tip

Se precisar de migrar um ficheiro de configuração INI para um formato moderno, o [Conversor INI para YAML](/tools/data/converters/ini-to-yaml) converte o seu ficheiro INI em YAML bem estruturado instantaneamente no seu navegador. Para projetos de empacotamento Rust ou Python que adotem ferramentas modernas, considere TOML — o [Validador TOML](/tools/data/validators/toml-validator) ajuda-o a verificar o resultado convertido.

INI vs TOML vs YAML

O INI nem sempre é o formato de configuração certo. Entender onde se encaixa — e onde TOML ou YAML é uma melhor escolha — ajuda-o a tomar a decisão certa para novos projetos.

CaracterísticaINITOMLYAML
Complexidade de sintaxeMínimaModeradaAlta
Suporte nativo de tipos✗ Só cadeias✓ Tipos completos✓ Tipos completos
Estruturas aninhadas✗ Dois níveis máx.✓ Tabelas em linha✓ Profundidade ilimitada
Arrays / listas✗ Não padrão✓ Arrays nativos✓ Sequências em bloco
Comentários✓ ; e #✓ Só #✓ Só #
Especificação formal✗ Sem especificação oficial✓ Especificação TOML✓ Especificação YAML 1.2
Melhor paraConfig simples de appsRust, pacotes PythonDevOps, Kubernetes
LegibilidadeMuito altaAltaMédia (sensível à indentação)

Quando usar INI

O INI é a escolha certa quando a sua configuração tem dois níveis de profundidade (secções e pares chave-valor planos), quando o parser destino já espera formato INI (PHP, ecossistema Python, MySQL, Git) e quando quer o formato mais simples possível que qualquer programador possa ler sem conhecimento prévio. Não é apropriado para configurações que precisem de arrays, objetos aninhados ou dados tipados.

Quando usar TOML ou YAML em vez disso

Escolha TOML quando a sua configuração precisar de valores tipados, arrays ou tabelas em linha e quiser uma especificação rigorosa com parsing previsível. O TOML é o formato de `pyproject.toml`, `Cargo.toml` e dos ficheiros de configuração do Hugo. Escolha YAML quando precisar de estruturas profundamente aninhadas ou trabalhar num ecossistema onde o YAML já é padrão — Kubernetes, GitHub Actions, Docker Compose e Ansible são ambientes YAML-first.

Key takeaways

  • Um ficheiro INI é um ficheiro de configuração de texto simples com secções nomeadas entre `[parênteses retos]` e pares `key = value` por baixo.
  • Use `;` para comentários — não `#` — para máxima compatibilidade entre Windows, PHP, Python e outros parsers INI.
  • Guarde os ficheiros INI como UTF-8 sem BOM; evite comentários em linha (após um valor na mesma linha) pois não são universalmente suportados.
  • Todos os valores INI são cadeias salvo se o seu parser os converter explicitamente — use `getboolean()`, `getint()` e `getfloat()` em Python.
  • Nunca armazene palavras-passe nem chaves de API em ficheiros INI submetidos ao controlo de versões — use variáveis de ambiente para valores sensíveis.
  • Valide com o Validador INI antes da implementação para detetar erros de sintaxe, secções duplicadas e problemas de formato.
  • Use TOML para configurações que precisem de valores tipados e arrays; use YAML para estruturas profundamente aninhadas — o INI é ideal apenas para configurações simples de dois níveis.

Perguntas frequentes

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