Konwersja CSV na YAML przekształca dane tabelaryczne rozdzielone przecinkami w format YAML (YAML Ain't Markup Language). Każdy wiersz pliku CSV staje się wpisem w sekwencji YAML, a każdy nagłówek kolumny mapuje się na klucz w odwzorowaniu YAML. Wynikiem jest czytelny dla człowieka dokument oparty na wcięciach, który narzędzia konfiguracyjne i potoki danych mogą parsować bezpośrednio, bez dodatkowych plików schematu.
YAML po raz pierwszy zaproponowano w 2001 roku, a jego obecna specyfikacja (YAML 1.2) pojawiła się w 2009 roku. Jest to domyślny format konfiguracji dla manifestów Kubernetes, plików Docker Compose, playbooków Ansible, przepływów pracy GitHub Actions i wielu systemów CI/CD. Gdy dane źródłowe znajdują się w arkuszu kalkulacyjnym lub eksporcie bazy danych, konwersja CSV na YAML to najszybszy sposób na generowanie wpisów konfiguracyjnych, danych inicjalizacyjnych lub danych testowych dla tych systemów.
Poprawny konwerter CSV na YAML musi obsługiwać zasady parsowania RFC 4180: pola w cudzysłowach zawierające przecinki lub znaki nowej linii, cudzysłowy ucieczki oraz różne separatory. Po stronie YAML wartości wyglądające jak wartości logiczne (yes, no, true, false), liczby lub null muszą być ujęte w cudzysłowy, aby parsery YAML nie rzutowały ich na niezamierzone typy. Konwerter powinien też obsługiwać zawartość Unicode i produkować poprawne wyjście UTF-8, ponieważ YAML 1.2 wymaga UTF-8 jako domyślnego kodowania.
Dlaczego warto używać konwertera CSV na YAML?
Ręczne pisanie YAML z danych arkusza kalkulacyjnego jest żmudne i podatne na błędy. Źle umieszczone wcięcie lub nieujęty w cudzysłów znak specjalny produkuje nieprawidłowy YAML, który psuje wdrożenia konfiguracji lub importy danych. Ten konwerter parsuje pola CSV, mapuje nagłówki na klucze i generuje poprawnie wcięty, prawidłowo cytowany wynik YAML.
⚡
Natychmiastowa konwersja w przeglądarce
Wklej lub załaduj dane CSV i od razu otrzymaj poprawny wynik YAML. Nie potrzebujesz narzędzi wiersza poleceń do zainstalowania, bibliotek do importowania ani etapu budowania.
🔒
Dane pozostają prywatne
Całe parsowanie i konwersja odbywa się lokalnie w przeglądarce z użyciem JavaScript. Twoje dane CSV nigdy nie opuszczają Twojego urządzenia, nie są przesyłane na serwer ani nigdzie przechowywane czy rejestrowane.
🎯
Generuje poprawnie sformatowany YAML
Wynik używa właściwych wcięć, ujmuje w cudzysłowy ciągi znaków, które w przeciwnym razie byłyby błędnie zinterpretowane jako wartości logiczne lub liczby, i generuje poprawny YAML 1.2, który przejdzie każdy linter lub walidator schematu.
📋
Obsługuje dowolny dialekt CSV
Automatycznie wykrywa przecinki, średniki, tabulatory i kreski pionowe jako separatory. Obsługuje zasady cytowania RFC 4180, w tym cudzysłowy ucieczki, pola wieloliniowe i pliki UTF-8 z BOM.
Przypadki użycia konwersji CSV na YAML
Konfiguracja Kubernetes i Docker Compose
Generuj bloki zmiennych środowiskowych, sekcje danych ConfigMap lub definicje usług Docker Compose z arkusza kalkulacyjnego wartości konfiguracyjnych. Wklej wynik YAML bezpośrednio do plików manifestów.
Dane playbooków Ansible
Przekonwertuj inwentarz CSV hostów, ról i zmiennych na pliki zmiennych w formacie YAML (group_vars, host_vars), które Ansible odczytuje natywnie bez żadnych niestandardowych wtyczek parsowania.
Konfiguracja potoków CI/CD
Zamień arkusz kalkulacyjny wpisów macierzy budowania, zmiennych środowiskowych lub celów wdrożenia w bloki konfiguracyjne YAML dla GitHub Actions, GitLab CI lub CircleCI. Eliminuje ręczne wpisywanie powtarzalnych definicji macierzy.
Dane inicjalizacyjne bazy danych
Frameworki takie jak Rails, Django i inne używają YAML dla danych testowych i inicjalizacyjnych. Przekonwertuj eksport bazy danych CSV na plik danych testowych YAML, który ORM może załadować bezpośrednio do testowej bazy danych.
Transformacja w potokach danych
Potoki ETL przyjmujące dane wejściowe YAML mogą przetworzyć przekonwertowane dane CSV bez pośredniego kroku JSON. Narzędzia takie jak dbt, Dagster i Prefect używają YAML do definiowania i konfiguracji potoków.
Nauka składni YAML
Studenci i programiści dopiero poznający YAML mogą wkleić znane dane CSV i zobaczyć, jak wiersze tabelaryczne przekształcają się w sekwencje i odwzorowania. Porównanie danych wejściowych i wyjściowych wyjaśnia reguły wcięć, składnię klucz-wartość i obsługę typów.
Dokumentacja mapowania CSV na YAML
Każdy element strukturalny pliku CSV ma bezpośredni odpowiednik w YAML.
Pojęcie CSV
Odpowiednik YAML
Szczegóły
CSV file
YAML document
The entire file becomes a YAML sequence (array) of mappings
Header row
Mapping keys
Each column header becomes a key in every mapping entry
Data row
Sequence item (- ...)
Each row becomes one mapping item in the top-level array
Cell value
Scalar value
Strings, numbers, and booleans are inferred by YAML parsers
Empty cell
null or empty string
Rendered as null, ~, or an empty value depending on the tool
Comma delimiter
Indentation + colon
CSV delimiters are replaced by YAML key: value structure
CSV a YAML
CSV to płaski format oparty na separatorach, bez informacji o typach ani hierarchii. YAML jest nadzbiorem JSON, który używa wcięć do zagnieżdżania, obsługuje wiele typów danych i dopuszcza komentarze. Wybór zależy od tego, czego oczekuje narzędzie docelowe.
CSV
Zwykły tekst, jeden rekord na wiersz. Każda wartość jest ciągiem znaków. Brak hierarchii, zagnieżdżania ani komentarzy. Minimalny rozmiar pliku. Obsługiwany przez praktycznie wszystkie arkusze kalkulacyjne, bazy danych i narzędzia wiersza poleceń. Zdefiniowany przez RFC 4180. Najlepszy do masowego transferu danych tabelarycznych między systemami, które są zgodne co do kolejności i typów kolumn.
YAML
Format oparty na wcięciach z natywną obsługą ciągów znaków, liczb całkowitych, liczb zmiennoprzecinkowych, wartości logicznych, null, dat, sekwencji (tablic) i odwzorowań (obiektów). Dopuszcza komentarze inline ze znakiem #. Używany jako główny format konfiguracji dla Kubernetes, Docker Compose, Ansible, GitHub Actions i większości nowoczesnych narzędzi DevOps. YAML 1.2 jest nadzbiorem JSON, więc każdy poprawny JSON jest jednocześnie poprawnym YAML.
Przykłady kodu
Działające przykłady w Node.js, Python, Go i narzędziach CLI. Każdy odczytuje wiersz nagłówka CSV jako klucze YAML, mapuje każdy wiersz danych na wpis sekwencji i obsługuje cytowanie dla wartości niejednoznacznych typowo.
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
Najczęściej zadawane pytania
Jak działa konwersja CSV na YAML?
Konwerter odczytuje pierwszy wiersz jako nagłówki kolumn. Każdy kolejny wiersz staje się odwzorowaniem YAML (obiektem klucz-wartość), a wszystkie odwzorowania są zbierane w sekwencję YAML (tablicę). Wynikiem jest lista obiektów, gdzie każdy klucz pochodzi z nagłówka, a każda wartość z zawartości komórki.
Co dzieje się z wartościami takimi jak "true", "yes" lub "null" w moim CSV?
Parsery YAML interpretują nieujęte w cudzysłowy wartości true, false, yes, no i null jako typowane wartości, a nie ciągi znaków. Konwerter ujmuje te wartości w cudzysłowy, dzięki czemu pozostają ciągami w wyjściu. Na przykład komórka CSV zawierająca "yes" staje się '"yes"' w wyjściu YAML, co zapobiega interpretacji jej jako wartości logicznej przez narzędzie konfiguracyjne.
Czy mogę przekonwertować YAML z powrotem na CSV?
Tak, o ile YAML jest płaską sekwencją odwzorowań (tablicą obiektów ze skalarnymi wartościami). Zagnieżdżone struktury YAML z głęboko zagnieżdżonymi mapami lub mieszanymi typami nie mogą być czysto przedstawione jako wiersze CSV. W przypadku płaskich struktur narzędzia takie jak yq, Miller (mlr) lub moduły yaml i csv Pythona obsługują konwersję odwrotną.
Jaka jest różnica między konwersją CSV na YAML a CSV na JSON?
Oba formaty produkują dane strukturalne z płaskiego wejścia CSV. JSON używa nawiasów klamrowych i kwadratowych ze ścisłymi regułami cytowania. YAML używa wcięć i dwukropków, obsługuje komentarze i jest łatwiejszy do odczytu i edycji ręcznej. Większość narzędzi DevOps (Kubernetes, Ansible, Docker Compose) oczekuje YAML. Większość web API i narzędzi opartych na JavaScript oczekuje JSON.
Jak obsługiwane są liczby i daty w wyjściu?
CSV traktuje każdą wartość jako ciąg znaków. Parsery YAML automatycznie wykrywają nieujęte w cudzysłowy liczby (42, 3.14) i daty ISO (2024-01-15) jako ich odpowiednie typy. Jeśli chcesz, aby wszystkie wartości pozostały ciągami znaków, konwerter może ująć każdą wartość w cudzysłowy. Jeśli zależy Ci na wnioskowaniu typów, pozostaw wartości bez cudzysłowów i pozwól parserowi YAML obsłużyć rozpoznawanie typów.
Czy konwerter obsługuje duże pliki CSV?
Narzędzie działa w całości w przeglądarce, więc wydajność zależy od dostępnej pamięci i limitów zakładki przeglądarki. Pliki do kilku megabajtów (dziesiątki tysięcy wierszy) konwertują się bez problemów na nowoczesnym sprzęcie. W przypadku bardzo dużych plików (100 MB+) użyj narzędzia CLI, takiego jak moduły csv i yaml Pythona, encoding/csv w Go z gopkg.in/yaml.v3 lub Miller (mlr), które mogą przetwarzać dane strumieniowo bez wczytywania wszystkiego do pamięci.
Czy generowane jest wyjście YAML 1.1 czy YAML 1.2?
To narzędzie generuje wyjście YAML 1.2. Główna różnica w stosunku do YAML 1.1 polega na tym, że wersja 1.2 wyeliminowała "problem Norwegii" (nieujęte w cudzysłowy 'no' interpretowane jako wartość logiczna false) i wyrównała zgodność z JSON. Większość nowoczesnych parserów (Go yaml.v3, Python PyYAML z safe_load, Ruby Psych) obsługuje YAML 1.2. Jeśli Twoje narzędzie wymaga zgodności z wersją 1.1, wyjście nadal będzie parsowane poprawnie w niemal wszystkich przypadkach, ponieważ wersja 1.2 jest wstecznie zgodna dla typowych struktur.