Pular para o conteúdo principal

CSV para YAML

Este conversor transforma um arquivo CSV RFC 4180 em uma sequência de mapeamentos YAML, inteiramente no seu navegador. Cabeçalhos de coluna são mapeados para chaves, e cabeçalhos com pontos ou colchetes são aninhados em YAML estruturado. A primeira linha fornece os nomes das chaves, as aspas seguem as regras de cada formato, e nada é enviado.

Só local

CSV para YAML: explicação

Um arquivo CSV é uma grade; um arquivo YAML é uma árvore. A ponte entre eles é a linha de cabeçalho: cada nome de coluna é lido como um caminho no registro que descreve. Um cabeçalho simples como role torna-se uma chave simples, address.city constrói um mapeamento address com uma chave city dentro dele, e tags[0] constrói uma lista — a mesma convenção de caminho de coluna que o conversor YAML para CSV do site usa, lida ao contrário. Como o mapeamento é explícito e reversível, um arquivo que vai de CSV para YAML e volta chega inalterado.

O lado CSV é analisado de acordo com o RFC 4180: delimitadores de vírgula, escape de aspas duplas quando um campo contém uma vírgula, aspa ou nova linha, e campos entre aspas que podem abranger várias linhas. Delimitadores são detectados a partir da linha de cabeçalho — vírgula, ponto e vírgula, tabulação ou pipe — contados apenas fora de regiões entre aspas, para que um ponto e vírgula dentro de uma descrição não possa sabotar a suposição. Inferência de tipo é deliberadamente restrita: apenas valores que correspondem à gramática de número do JSON se tornam números, é assim que um CEP como 02134 mantém seu zero à esquerda intacto.

Tudo é executado nesta aba do navegador. O texto CSV que você cola é analisado por um motor na página, o YAML é emitido a partir dos registros analisados, e nenhum deles toca a rede — abra o DevTools, veja o painel de Rede permanecer silencioso, e a afirmação se comprova.

O ida e volta também é a verificação de correção mais rápida, e o Conversor de YAML para CSV reconstrói a grade a partir do YAML usando os mesmos caminhos de coluna.

Se uma exportação teimosa se recusar a ser analisada como você espera, o Guia de campos RFC 4180 explica as aspas, CRLF e os desvios que arquivos de planilha reais contêm.

Como a conversão realmente funciona

O motor lê a grade uma vez e nunca mais olha o texto bruto — cada decisão posterior é tomada com base nos registros analisados. Essa ordenação é o que mantém as regras compostas: caminhos de cabeçalho são expandidos antes que os tipos sejam inferidos, e os tipos são inferidos antes que o emissor YAML decida o que precisa de aspas.

  • Analisar: uma pequena máquina de estados divide o texto em campos, respeitando aspas duplas e novas linhas dentro de campos entre aspas, e remove uma marca de ordem de byte (BOM) se presente.
  • Nomear: a primeira linha torna-se os nomes das colunas; uma célula de cabeçalho em branco volta para column1, column2 e assim por diante.
  • Expandir: cada cabeçalho é decodificado como um caminho — pontos separam chaves de mapeamento, colchetes marcam índices de array — e cada linha é reconstruída como um registro aninhado.
  • Emitir: os registros são serializados como uma sequência YAML, recuo de dois espaços, valores entre aspas apenas quando a forma simples seria mal interpretada.

O que os nomes dos cabeçalhos significam

Cabeçalhos são o único lugar onde uma grade pode expressar estrutura, então eles são lidos como caminhos em vez de rótulos opacos. O ponto e o colchete fazem trabalhos diferentes, e a diferença é o que torna o mapeamento reversível: um ponto sempre significa uma chave de mapeamento, um colchete sempre significa um índice de array, então tags[0] constrói uma lista enquanto tags.0 constrói um mapeamento cuja chave é a string "0". Um conversor que tratasse os dois como intercambiáveis estaria adivinhando, e adivinharia errado metade do tempo.

Linha de cabeçalhoYAML produzido
address.cityum mapeamento address com uma chave city dentro dele
tags[0], tags[1]uma lista tags com esses dois elementos
tags.0um mapeamento tags com a chave de string "0" — não uma lista
roleuma chave role simples em cada registro

Células, tipos e campos vazios

A inferência de tipo existe para tornar o YAML útil, e é mantida em uma curça coleira. Uma célula torna-se um número apenas se corresponder à gramática de número do JSON — o que proíbe zeros à esquerda — e torna-se true, false ou null apenas nesses exatos grafismos em minúsculas. Tudo o mais permanece uma string, incluindo FALSE, +1, 0x10 e qualquer inteiro mais longo que o intervalo seguro, onde ponto flutuaria silenciosamente descartaria dígitos. Uma célula vazia é tratada como um campo ausente em vez de um valor vazio, porque CSV não consegue distinguir os dois e a leitura de ausente é o que uma linha esparsa quase sempre significa.

  • 02134 permanece a string "02134"; 90210 torna-se o número 90210.
  • true e false tornam-se booleanos; FALSE em maiúsculas permanece uma string.
  • Uma célula com novas linhas embutidas torna-se um literal de bloco YAML, para que a estrutura de linha sobreviva.
  • Valores que seriam relidos como números são emitidos com aspas, o que mantém uma ida e volta sem perda.

Onde este conversor se recusa a adivinhar

Falhas são relatadas com um número de linha e uma razão, em vez de serem mascaradas, porque o redesenho silencioso é a única falha de que uma ferramenta de dados não se recupera. Três situações recebem exatamente esse tratamento:

  • Um campo entre aspas não terminado — uma aspa dupla aberta e nunca fechada — aborta a análise naquela linha.
  • Uma linha cuja contagem de campos difere do cabeçalho ainda converte, mas um aviso nomeia as linhas afetadas e afirma que campos ausentes são tratados como tais e extras são descartados.
  • Nomes de coluna duplicados convertem com o valor mais à direita vencendo, e o aviso diz isso — correspondendo como um importe de planilha se comporta.

Perguntas frequentes

Converter CSV para YAML envia meu arquivo para algum lugar?

Não. A análise e a geração de YAML são executadas dentro desta aba do navegador com JavaScript que foi carregado uma vez quando a página abriu. Não há rota de API para enviar dados, e a Content-Security-Policy da página define connect-src 'self', então o navegador próprio recusaria qualquer solicitação de saída. Você pode verificar ambas as afirmações no DevTools: o painel de Rede não mostra nenhuma solicitação quando você converte.

Como os cabeçalhos CSV se tornam chaves YAML aninhadas?

Cada cabeçalho é decodificado como um caminho: pontos separam chaves de mapeamento e colchetes marcam índices de array, então address.city aninha-se sob uma chave address enquanto tags[0] constrói uma lista. A forma de colchete não é decoração — tags.0 cria um mapeamento com a chave de string "0", porque um ponto nu não pode dizer se o nível abaixo é uma lista ou um objeto. Manter os dois grafismos distintos é o que torna a convenção reversível.

O que acontece com números e CEPs nas células?

Uma célula torna-se um número apenas quando corresponde à gramática de número do JSON, o que proíbe zeros à esquerda — então 02134 permanece uma string enquanto 90210 torna-se um número. Inteiros além do intervalo seguro também permanecem strings em vez de perder dígitos. Booleanos exigem os exatos grafismos em minúsculas true e false, e null da mesma forma; FALSE em maiúsculas permanece a string que é visualmente.

Por que células vazias desaparecem da saída YAML?

Uma célula vazia é emitida como uma chave ausente, não um valor vazio. CSV não tem como distinguir um campo que está genuinamente vazio de um que uma linha simplesmente não tem, e a leitura de ausente corresponde ao caso esparso que realmente ocorre — um registro mais curto que a linha mais larga. Se um consumidor downstream precisa da chave presente, uma célula vazia explicitamente entre aspas é o modo de pedir isso.

Qual estilo de recuo a saída YAML usa?

Dois espaços por nível, a convenção usada em Kubernetes, CI e arquivos Docker, com travessias de sequência alinhadas à sua chave pai em vez de recuadas sob ela. Células de múltiplas linhas tornam-se literais de bloco para que quebras de linha embutidas sobrevivam literalmente, e o documento é emitido sem um marcador inicial --- porque um arquivo de documento único não precisa dele.

Quão grande um arquivo CSV isso pode lidar?

O limite prático é a memória desta aba, não um limite de envio — a caixa de colagem é a entrada. Como cada ferramenta de thread principal neste site, há um teto documentado de 8 MB; acima dele, o processamento é recusado com uma mensagem clara em vez de congelar a página. Para exportações tabulares típicas, essa folga é de dezenas de milhares de linhas.