ToolDeck

Convertidor CSV a YAML

Convierte datos CSV a array de objetos YAML

Prueba un ejemplo

Entrada CSV

Salida YAML

Se ejecuta localmente · Es seguro pegar secretos
La salida YAML aparecerá aquí…

¿Qué es la conversión de CSV a YAML?

La conversión de CSV a YAML transforma datos tabulares separados por comas al formato YAML (YAML Ain't Markup Language). Cada fila del archivo CSV se convierte en una entrada de una secuencia YAML, y cada cabecera de columna se mapea a una clave en un mapeo YAML. El resultado es un documento legible por humanos, basado en indentación, que las herramientas de configuración y los pipelines de datos pueden analizar directamente sin archivos de esquema adicionales.

YAML se propuso por primera vez en 2001 y alcanzó su especificación actual (YAML 1.2) en 2009. Es el formato de configuración predeterminado para manifiestos de Kubernetes, archivos Docker Compose, playbooks de Ansible, flujos de trabajo de GitHub Actions y la mayoría de los sistemas CI/CD. Cuando tus datos de origen están en una hoja de cálculo o en una exportación de base de datos, convertir CSV a YAML es la forma más rápida de generar entradas de configuración, fixtures de datos iniciales o entradas de prueba para estos sistemas.

Un conversor correcto de CSV a YAML debe gestionar las reglas de análisis de RFC 4180: campos entrecomillados que contienen comas o saltos de línea, comillas dobles escapadas y delimitadores variables. En el lado YAML, las cadenas que parecen booleanos (yes, no, true, false), números o null deben entrecomillarse para evitar que los analizadores YAML las coaccionen a tipos no deseados. El conversor también debe gestionar contenido Unicode y producir salida UTF-8 válida, ya que YAML 1.2 requiere UTF-8 como codificación predeterminada.

¿Por qué usar un conversor de CSV a YAML?

Escribir YAML a mano a partir de datos de hojas de cálculo es tedioso y propenso a errores. Una indentación incorrecta o un carácter especial sin entrecomillar produce YAML no válido que rompe los despliegues de configuración o las importaciones de datos. Este conversor analiza los campos CSV, mapea las cabeceras a claves y genera salida YAML correctamente indentada y entrecomillada.

Conversión instantánea en tu navegador
Pega o sube datos CSV y obtén salida YAML válida de inmediato. Sin herramientas de línea de comandos que instalar, sin librerías que importar, sin paso de compilación necesario.
🔒
Tus datos permanecen privados
Todo el análisis y la conversión se ejecuta localmente en tu navegador con JavaScript. Tus datos CSV nunca salen de tu máquina, nunca se envían a un servidor y nunca se almacenan ni se registran.
🎯
YAML correctamente formateado
La salida usa indentación correcta, entrecomilla las cadenas que de otro modo se interpretarían erróneamente como booleanos o números, y genera YAML 1.2 válido que supera cualquier linter o validador de esquema.
📋
Gestiona cualquier dialecto CSV
Detecta automáticamente comas, punto y coma, tabuladores y pipes como delimitadores. Soporta las reglas de entrecomillado de RFC 4180, incluidas comillas dobles escapadas, campos multilínea y archivos UTF-8 con BOM.

Casos de uso de CSV a YAML

Configuración de Kubernetes y Docker Compose
Genera bloques de variables de entorno, secciones de datos ConfigMap o definiciones de servicios Docker Compose a partir de una hoja de cálculo de valores de configuración. Pega la salida YAML directamente en tus archivos de manifiesto.
Datos para playbooks de Ansible
Convierte un inventario CSV de hosts, roles y variables en archivos de variables con formato YAML (group_vars, host_vars) que Ansible lee de forma nativa sin plugins de análisis personalizados.
Configuración de pipelines CI/CD
Transforma una hoja de cálculo de entradas de matrices de compilación, variables de entorno o destinos de despliegue en bloques de configuración YAML para GitHub Actions, GitLab CI o CircleCI. Evita escribir manualmente definiciones de matrices repetitivas.
Fixtures de seed para bases de datos
Rails, Django y otros frameworks usan YAML para fixtures de prueba y datos iniciales. Convierte una exportación CSV de base de datos en un archivo de fixture YAML que el ORM puede cargar directamente en la base de datos de prueba.
Transformación en pipelines de datos
Los pipelines ETL que aceptan entradas YAML pueden ingerir datos CSV convertidos sin un paso intermedio a JSON. Herramientas como dbt, Dagster y Prefect usan YAML para definiciones de pipelines y configuración.
Aprender la sintaxis YAML
Los estudiantes y desarrolladores que se inician en YAML pueden pegar datos CSV conocidos y ver cómo las filas tabulares se traducen en secuencias y mapeos. Comparar la entrada y la salida aclara las reglas de indentación, la sintaxis clave-valor y el manejo de tipos.

Referencia de mapeo CSV a YAML

Cada elemento estructural de un archivo CSV tiene su equivalente directo en YAML.

Concepto CSVEquivalente YAMLDetalles
CSV fileYAML documentThe entire file becomes a YAML sequence (array) of mappings
Header rowMapping keysEach column header becomes a key in every mapping entry
Data rowSequence item (- ...)Each row becomes one mapping item in the top-level array
Cell valueScalar valueStrings, numbers, and booleans are inferred by YAML parsers
Empty cellnull or empty stringRendered as null, ~, or an empty value depending on the tool
Comma delimiterIndentation + colonCSV delimiters are replaced by YAML key: value structure

CSV vs YAML

CSV es un formato plano separado por delimitadores sin información de tipo ni jerarquía. YAML es un superconjunto de JSON que usa indentación para el anidamiento, soporta múltiples tipos de datos y permite comentarios. La elección depende de lo que espere tu herramienta downstream.

CSV
Texto plano, un registro por línea. Todos los valores son cadenas. Sin jerarquía, anidamiento ni comentarios. Tamaño de archivo mínimo. Soportado universalmente por hojas de cálculo, bases de datos y herramientas de línea de comandos. Definido por RFC 4180. Ideal para la transferencia masiva de datos tabulares entre sistemas que acuerdan el orden y los tipos de columnas.
YAML
Formato basado en indentación con soporte nativo para cadenas, enteros, flotantes, booleanos, null, fechas, secuencias (arrays) y mapeos (objetos). Permite comentarios en línea con #. Usado como formato de configuración principal para Kubernetes, Docker Compose, Ansible, GitHub Actions y la mayoría de las herramientas modernas de DevOps. YAML 1.2 es un superconjunto de JSON, por lo que cualquier JSON válido es también YAML válido.

Ejemplos de código

Ejemplos funcionales en Node.js, Python, Go y herramientas de línea de comandos. Cada uno lee la fila de cabecera del CSV como claves YAML, mapea cada fila de datos a una entrada de secuencia y gestiona el entrecomillado para valores con ambigüedad de tipo.

JavaScript (Node.js)
import { parse } from 'csv-parse/sync'
import { stringify } from 'yaml'

const csv = `name,age,city
Alice,30,Berlin
Bob,25,"New York"`

const records = parse(csv, { columns: true, skip_empty_lines: true })
console.log(stringify(records))
// → - name: Alice
// →   age: "30"
// →   city: Berlin
// → - name: Bob
// →   age: "25"
// →   city: New York

// Vanilla JS (no dependencies)
function csvToYaml(csv) {
  const [headerLine, ...dataLines] = csv.trim().split('\n')
  const headers = headerLine.split(',')
  return dataLines.map(line => {
    const values = line.split(',')
    return headers.map((h, i) => `  ${h}: ${values[i] || ''}`).join('\n')
  }).map(block => `- ${block.trimStart()}`).join('\n')
}
Python
import csv, io, yaml

csv_string = """name,age,city
Alice,30,Berlin
Bob,25,New York"""

reader = csv.DictReader(io.StringIO(csv_string))
data = list(reader)

# default_flow_style=False produces block-style YAML
print(yaml.dump(data, default_flow_style=False, sort_keys=False))
# → - age: '30'
# →   city: Berlin
# →   name: Alice
# → - age: '25'
# →   city: New York
# →   name: Bob

# Preserve insertion order with sort_keys=False (Python 3.7+)
# To type-cast numbers: data = [{k: int(v) if v.isdigit() else v ...}]
Go
package main

import (
	"encoding/csv"
	"fmt"
	"gopkg.in/yaml.v3"
	"strings"
)

func main() {
	input := "name,age,city
Alice,30,Berlin
Bob,25,New York"
	r := csv.NewReader(strings.NewReader(input))
	records, _ := r.ReadAll()
	headers := records[0]

	var data []map[string]string
	for _, row := range records[1:] {
		entry := make(map[string]string)
		for i, h := range headers {
			entry[h] = row[i]
		}
		data = append(data, entry)
	}

	out, _ := yaml.Marshal(data)
	fmt.Println(string(out))
	// → - age: "30"
	// →   city: Berlin
	// →   name: Alice
	// → - age: "25"
	// →   city: New York
	// →   name: Bob
}
CLI (yq / Miller)
# Using yq (https://github.com/mikefarah/yq)
# yq reads CSV with --input-format=csv
yq --input-format=csv --output-format=yaml '.' data.csv

# Using Miller (mlr) — converts between CSV, JSON, YAML, and more
mlr --icsv --oyaml cat data.csv

# Python one-liner for quick conversion
python3 -c "
import csv, sys, yaml
data = list(csv.DictReader(sys.stdin))
print(yaml.dump(data, default_flow_style=False, sort_keys=False))
" < data.csv

Preguntas frecuentes

¿Cómo funciona la conversión de CSV a YAML?
El conversor lee la primera fila como cabeceras de columna. Cada fila siguiente se convierte en un mapeo YAML (objeto clave-valor), y todos los mapeos se recopilan en una secuencia YAML (array). El resultado es una lista de objetos donde cada clave proviene de la cabecera y cada valor proviene del contenido de la celda.
¿Qué ocurre con valores como "true", "yes" o "null" en mi CSV?
Los analizadores YAML interpretan los valores bare true, false, yes, no y null como valores tipados en lugar de cadenas. El conversor entrecomilla estos valores para que permanezcan como cadenas en la salida. Por ejemplo, una celda CSV con "yes" se convierte en '"yes"' en la salida YAML, evitando que tu herramienta de configuración lo interprete como booleano.
¿Puedo convertir YAML de vuelta a CSV?
Sí, siempre que el YAML sea una secuencia plana de mapeos (array de objetos con valores escalares). Las estructuras YAML anidadas con mapas profundamente anidados o tipos mixtos no pueden representarse limpiamente como filas CSV. Para estructuras planas, herramientas como yq, Miller (mlr) o los módulos yaml y csv de Python gestionan la conversión inversa.
¿Cuál es la diferencia entre CSV a YAML y CSV a JSON?
Ambos producen datos estructurados a partir de entrada CSV plana. JSON usa llaves y corchetes con reglas estrictas de entrecomillado. YAML usa indentación y dos puntos, soporta comentarios y es más fácil de leer y editar a mano. La mayoría de las herramientas de DevOps (Kubernetes, Ansible, Docker Compose) esperan YAML. La mayoría de las APIs web y herramientas basadas en JavaScript esperan JSON.
¿Cómo se gestionan los números y las fechas en la salida?
CSV trata todos los valores como cadenas. Los analizadores YAML detectan automáticamente los números sin entrecomillar (42, 3.14) y las fechas ISO (2024-01-15) como sus tipos respectivos. Si necesitas que todos los valores permanezcan como cadenas, el conversor puede entrecomillar cada valor. Si quieres inferencia de tipos, deja los valores sin entrecomillar y deja que el analizador YAML resuelva los tipos.
¿Gestiona el conversor archivos CSV grandes?
La herramienta se ejecuta completamente en tu navegador, por lo que el rendimiento depende de la memoria disponible y los límites de la pestaña del navegador. Los archivos de hasta unos pocos megabytes (decenas de miles de filas) se convierten sin problemas en hardware moderno. Para archivos muy grandes (100 MB o más), usa una herramienta de línea de comandos como los módulos csv y yaml de Python, Go con encoding/csv y gopkg.in/yaml.v3, o Miller (mlr), que puede transmitir datos en streaming sin cargarlos todos en memoria.
¿Se genera salida YAML 1.1 o YAML 1.2?
Esta herramienta genera salida YAML 1.2. La principal diferencia respecto a YAML 1.1 es que la versión 1.2 eliminó el "problema de Noruega" (el bare 'no' interpretado como booleano false) y alineó su compatibilidad con JSON. La mayoría de los analizadores modernos (Go yaml.v3, Python PyYAML con safe_load, Ruby Psych) soportan YAML 1.2. Si tu herramienta requiere compatibilidad con la versión 1.1, la salida seguirá analizándose correctamente en casi todos los casos, ya que la 1.2 es compatible con versiones anteriores para estructuras comunes.