ToolDeck

Da CSV a YAML

Converti dati CSV in un array YAML di oggetti

Prova un esempio

Input CSV

Output YAML

Esegue in locale · Sicuro per incollare segreti
L'output YAML apparirà qui…

Cos'è la conversione da CSV a YAML?

La conversione da CSV a YAML trasforma dati tabulari separati da virgole nel formato YAML (YAML Ain't Markup Language). Ogni riga del file CSV diventa una voce in una sequenza YAML, e ogni intestazione di colonna corrisponde a una chiave in un mapping YAML. Il risultato è un documento leggibile dall'uomo, basato sull'indentazione, che gli strumenti di configurazione e le pipeline di dati possono analizzare direttamente senza file di schema aggiuntivi.

YAML è stato proposto per la prima volta nel 2001 e ha raggiunto la specifica attuale (YAML 1.2) nel 2009. È il formato di configurazione predefinito per i manifest Kubernetes, i file Docker Compose, i playbook Ansible, i workflow GitHub Actions e molti sistemi CI/CD. Quando i dati di origine si trovano in un foglio di calcolo o in un export di database, convertire CSV in YAML è il modo più rapido per generare voci di configurazione, fixture di seed o input di test per questi sistemi.

Un convertitore da CSV a YAML corretto deve gestire le regole di parsing RFC 4180: campi tra virgolette che contengono virgole o a capo, virgolette doppie con escape e delimitatori variabili. Sul lato YAML, le stringhe che sembrano booleani (yes, no, true, false), numeri o null devono essere racchiuse tra virgolette per evitare che i parser YAML le convertano in tipi non desiderati. Il convertitore deve inoltre gestire contenuti Unicode e produrre output UTF-8 valido, poiché YAML 1.2 richiede UTF-8 come codifica predefinita.

Perché usare un convertitore da CSV a YAML?

Scrivere YAML a mano partendo da dati di fogli di calcolo è tedioso e soggetto a errori. Un'indentazione errata o un carattere speciale non quotato produce YAML non valido che blocca i deployment di configurazione o le importazioni di dati. Questo convertitore analizza i campi CSV, mappa le intestazioni in chiavi e genera output YAML correttamente indentato e quotato.

Conversione istantanea nel browser
Incolla o carica dati CSV e ottieni subito output YAML valido. Nessun CLI da installare, nessuna libreria da importare, nessun passaggio di build necessario.
🔒
I tuoi dati rimangono privati
Tutto il parsing e la conversione avviene localmente nel browser tramite JavaScript. I tuoi dati CSV non lasciano mai il tuo dispositivo, non vengono mai inviati a un server e non vengono mai archiviati o registrati.
🎯
Output YAML correttamente formattato
L'output usa un'indentazione corretta, racchiude tra virgolette le stringhe che altrimenti verrebbero interpretate come booleani o numeri, e genera YAML 1.2 valido che supera qualsiasi linter o validatore di schema.
📋
Gestisce qualsiasi dialetto CSV
Rileva automaticamente virgole, punti e virgola, tabulatori e pipe come delimitatori. Supporta le regole di quotatura RFC 4180, incluse virgolette doppie con escape, campi multiriga e file UTF-8 con BOM.

Casi d'uso da CSV a YAML

Configurazione Kubernetes e Docker Compose
Genera blocchi di variabili d'ambiente, sezioni di dati ConfigMap o definizioni di servizi Docker Compose da un foglio di calcolo di valori di configurazione. Incolla l'output YAML direttamente nei tuoi file manifest.
Dati per i playbook Ansible
Converti un inventario CSV di host, ruoli e variabili in file di variabili YAML (group_vars, host_vars) che Ansible legge nativamente senza alcun plugin di parsing personalizzato.
Configurazione pipeline CI/CD
Trasforma un foglio di calcolo con voci di matrici di build, variabili d'ambiente o target di deployment in blocchi di configurazione YAML per GitHub Actions, GitLab CI o CircleCI. Evita la digitazione manuale di definizioni di matrici ripetitive.
Fixture di seed per il database
Rails, Django e altri framework usano YAML per fixture di test e dati seed. Converti un export CSV del database in un file di fixture YAML che l'ORM può caricare direttamente nel database di test.
Trasformazione di pipeline dati
Le pipeline ETL che accettano input YAML possono acquisire dati CSV convertiti senza un passaggio JSON intermedio. Strumenti come dbt, Dagster e Prefect usano YAML per le definizioni delle pipeline e la configurazione.
Apprendimento della sintassi YAML
Gli studenti e gli sviluppatori che si avvicinano a YAML possono incollare dati CSV familiari e vedere come le righe tabulari si traducono in sequenze e mapping. Confrontare input e output chiarisce le regole di indentazione, la sintassi chiave-valore e la gestione dei tipi.

Riferimento per la mappatura da CSV a YAML

Ogni elemento strutturale di un file CSV ha una controparte diretta in YAML.

Concetto CSVEquivalente YAMLDettagli
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 è un formato piatto, separato da delimitatori, senza informazioni sui tipi o gerarchia. YAML è un superset di JSON che usa l'indentazione per l'annidamento, supporta più tipi di dati e consente commenti. La scelta dipende da cosa si aspetta il tuo strumento a valle.

CSV
Testo semplice, un record per riga. Ogni valore è una stringa. Nessuna gerarchia, annidamento o commenti. Dimensione minima del file. Supportato universalmente da fogli di calcolo, database e strumenti da riga di comando. Definito da RFC 4180. Ideale per il trasferimento bulk di dati tabulari tra sistemi che concordano sull'ordine e sui tipi delle colonne.
YAML
Formato basato sull'indentazione con supporto nativo per stringhe, interi, float, booleani, null, date, sequenze (array) e mapping (oggetti). Consente commenti inline con #. Usato come formato di configurazione principale per Kubernetes, Docker Compose, Ansible, GitHub Actions e la maggior parte dei moderni strumenti DevOps. YAML 1.2 è un superset di JSON, quindi qualsiasi JSON valido è anche YAML valido.

Esempi di codice

Esempi funzionanti in Node.js, Python, Go e strumenti CLI. Ognuno legge la riga di intestazione CSV come chiavi YAML, mappa ogni riga di dati in una voce di sequenza e gestisce la quotatura per valori con ambiguità di 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

Domande frequenti

Come funziona la conversione da CSV a YAML?
Il convertitore legge la prima riga come intestazioni di colonna. Ogni riga successiva diventa un mapping YAML (oggetto chiave-valore), e tutti i mapping vengono raccolti in una sequenza YAML (array). Il risultato è un elenco di oggetti in cui ogni chiave proviene dall'intestazione e ogni valore proviene dal contenuto della cella.
Cosa succede ai valori come "true", "yes" o "null" nel mio CSV?
I parser YAML interpretano bare true, false, yes, no e null come valori tipizzati anziché come stringhe. Il convertitore racchiude questi valori tra virgolette affinché rimangano stringhe nell'output. Ad esempio, una cella CSV contenente "yes" diventa '"yes"' nell'output YAML, impedendo al tuo strumento di configurazione di interpretarla come booleano.
Posso riconvertire YAML in CSV?
Sì, a patto che il YAML sia una sequenza piatta di mapping (array di oggetti con valori scalari). Le strutture YAML annidate con mappe profondamente annidate o tipi misti non possono essere rappresentate in modo pulito come righe CSV. Per strutture piatte, strumenti come yq, Miller (mlr) o i moduli yaml e csv di Python gestiscono la conversione inversa.
Qual è la differenza tra la conversione da CSV a YAML e da CSV a JSON?
Entrambi producono dati strutturati da input CSV piatto. JSON usa parentesi graffe e quadre con regole di quotatura rigide. YAML usa l'indentazione e i due punti, supporta i commenti ed è più facile da leggere e modificare a mano. La maggior parte degli strumenti DevOps (Kubernetes, Ansible, Docker Compose) si aspetta YAML. La maggior parte delle API web e degli strumenti basati su JavaScript si aspetta JSON.
Come vengono gestiti numeri e date nell'output?
CSV tratta ogni valore come una stringa. I parser YAML rilevano automaticamente i numeri non quotati (42, 3.14) e le date ISO (2024-01-15) come tipi corrispondenti. Se hai bisogno che tutti i valori rimangano stringhe, il convertitore può racchiuderli tutti tra virgolette. Se vuoi l'inferenza dei tipi, lascia i valori non quotati e lascia che il parser YAML gestisca la risoluzione dei tipi.
Il convertitore gestisce file CSV di grandi dimensioni?
Lo strumento funziona interamente nel browser, quindi le prestazioni dipendono dalla memoria disponibile e dai limiti della scheda del browser. File fino a qualche megabyte (decine di migliaia di righe) si convertono senza problemi su hardware moderno. Per file molto grandi (100 MB+), usa uno strumento CLI come i moduli csv e yaml di Python, il pacchetto encoding/csv di Go con gopkg.in/yaml.v3, o Miller (mlr), che può trasmettere i dati in streaming senza caricare tutto in memoria.
L'output prodotto è YAML 1.1 o YAML 1.2?
Questo strumento produce output YAML 1.2. La principale differenza rispetto a YAML 1.1 è che la versione 1.2 ha eliminato il "Norway problem" (bare 'no' interpretato come false booleano) e ha allineato la compatibilità JSON. La maggior parte dei parser moderni (Go yaml.v3, Python PyYAML con safe_load, Ruby Psych) supporta YAML 1.2. Se il tuo strumento richiede compatibilità con la versione 1.1, l'output verrà comunque analizzato correttamente nella quasi totalità dei casi, poiché la versione 1.2 è retrocompatibile per le strutture più comuni.