Převod CSV na YAML transformuje tabulková data oddělená čárkami do formátu YAML (YAML Ain't Markup Language). Každý řádek CSV souboru se stane jednou položkou v sekvenci YAML a každé záhlaví sloupce se namapuje na klíč ve slovníku YAML. Výstupem je čitelný dokument s odsazením, který mohou konfigurační nástroje a datové pipeline přímo zparsovat bez dalších souborů se schématem.
YAML byl poprvé navržen v roce 2001 a jeho aktuální specifikace (YAML 1.2) byla dokončena v roce 2009. Je to výchozí konfigurační formát pro manifesty Kubernetes, soubory Docker Compose, playbooky Ansible, pracovní postupy GitHub Actions a řadu CI/CD systémů. Pokud jsou zdrojová data uložena v tabulkovém procesoru nebo exportu z databáze, převod CSV na YAML je nejrychlejší způsob, jak vygenerovat položky konfigurace, přípravky pro výchozí data nebo testovací vstupy pro tyto systémy.
Správný CSV-to-YAML převodník musí zvládnout pravidla parsování dle RFC 4180: uvozovaná pole obsahující čárky nebo konce řádků, escapované dvojité uvozovky a různé oddělovače. Na straně YAML musí být řetězce podobající se logickým hodnotám (yes, no, true, false), číslům nebo null uzavřeny do uvozovek, aby jim YAML parsery nepřiřadily nezamýšlené typy. Převodník by měl rovněž zpracovávat obsah v kódování Unicode a produkovat platný výstup v UTF-8, protože YAML 1.2 vyžaduje UTF-8 jako výchozí kódování.
Proč použít převodník CSV na YAML?
Ruční psaní YAML z dat tabulkového procesoru je zdlouhavé a náchylné k chybám. Špatně umístěné odsazení nebo neuvozovaný speciální znak produkuje neplatný YAML, který narušuje nasazení konfigurací nebo import dat. Tento převodník zparsuje CSV pole, namapuje záhlaví na klíče a vygeneruje správně odsazený a správně uvozovaný výstup YAML.
⚡
Okamžitý převod v prohlížeči
Vložte nebo nahrajte CSV data a ihned získejte platný výstup YAML. Žádné nástroje CLI k instalaci, žádné knihovny k importu, žádný krok sestavení není potřeba.
🔒
Vaše data zůstávají soukromá
Veškeré parsování a převod probíhají lokálně ve vašem prohlížeči pomocí JavaScriptu. Vaše CSV data nikdy neopustí váš počítač, nejsou nikdy odeslána na server a nejsou nikdy uložena ani zaznamenána.
🎯
Správně formátovaný výstup YAML
Výstup používá správné odsazení, uzavírá do uvozovek řetězce, které by jinak byly nesprávně interpretovány jako logické hodnoty nebo čísla, a generuje platný YAML 1.2, který projde jakýmkoli linterem nebo validátorem schématu.
📋
Podpora libovolného dialektu CSV
Automaticky rozpozná čárky, středníky, tabulátory a svislice jako oddělovače. Podporuje pravidla uvozování dle RFC 4180 včetně escapovaných dvojitých uvozovek, víceřádkových polí a souborů UTF-8 s BOM.
Případy použití CSV na YAML
Konfigurace Kubernetes a Docker Compose
Generujte bloky proměnných prostředí, datové sekce ConfigMap nebo definice služeb Docker Compose z tabulky konfiguračních hodnot. Výstup YAML vložte přímo do souborů manifestů.
Data pro playbooky Ansible
Převeďte CSV inventář hostitelů, rolí a proměnných na soubory proměnných ve formátu YAML (group_vars, host_vars), které Ansible čte nativně bez vlastních parsovacích pluginů.
Konfigurace CI/CD pipeline
Přeměňte tabulku se záznamy matice sestavení, proměnnými prostředí nebo cíli nasazení na bloky konfigurace YAML pro GitHub Actions, GitLab CI nebo CircleCI. Odpadá ruční psaní opakujících se definic matice.
Přípravky pro databázové výchozí hodnoty
Rails, Django a další frameworky používají YAML pro testovací přípravky a výchozí data. Převeďte CSV export z databáze na soubor přípravků YAML, který může ORM přímo načíst do testovací databáze.
Transformace datové pipeline
ETL pipeline přijímající vstupy YAML mohou ingestovat převedená CSV data bez mezikroku JSON. Nástroje jako dbt, Dagster a Prefect používají YAML pro definice pipeline a konfiguraci.
Výuka syntaxe YAML
Studenti a vývojáři, kteří jsou s YAML noví, mohou vložit dobře známá CSV data a vidět, jak se tabulkové řádky převádějí na sekvence a slovníky. Porovnání vstupu a výstupu objasňuje pravidla odsazení, syntaxi klíč-hodnota a zpracování typů.
Referenční přehled mapování CSV na YAML
Každý strukturální prvek CSV souboru má přímý protějšek v YAML.
Koncept CSV
Ekvivalent YAML
Podrobnosti
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 vs YAML
CSV je plochý, oddělovačem oddělený formát bez informací o typech nebo hierarchii. YAML je nadmnožina JSON, která pro vnořování používá odsazení, podporuje více datových typů a umožňuje komentáře. Volba závisí na tom, co očekává váš cílový nástroj.
CSV
Prostý text, jeden záznam na řádek. Každá hodnota je řetězec. Žádná hierarchie, vnořování ani komentáře. Minimální velikost souboru. Universálně podporováno tabulkovými procesory, databázemi a nástroji příkazové řádky. Definováno specifikací RFC 4180. Nejvhodněji pro hromadný přenos tabulkových dat mezi systémy, které se dohodly na pořadí sloupců a typech.
YAML
Formát založený na odsazení s nativní podporou řetězců, celých čísel, desetinných čísel, logických hodnot, null, dat, sekvencí (polí) a slovníků (objektů). Umožňuje vkládání komentářů pomocí #. Používá se jako primární konfigurační formát pro Kubernetes, Docker Compose, Ansible, GitHub Actions a většinu moderních DevOps nástrojů. YAML 1.2 je nadmnožina JSON, takže jakýkoli platný JSON je také platný YAML.
Příklady kódu
Funkční příklady v Node.js, Pythonu, Go a nástrojích příkazové řádky. Každý čte záhlavní řádek CSV jako klíče YAML, mapuje každý datový řádek na položku sekvence a zajišťuje uvozování pro hodnoty s nejednoznačným typem.
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
Časté dotazy
Jak funguje převod CSV na YAML?
Převodník čte první řádek jako záhlaví sloupců. Každý následující řádek se stane slovníkem YAML (objekt klíč-hodnota) a všechny slovníky jsou shromážděny do sekvence YAML (pole). Výsledkem je seznam objektů, kde každý klíč pochází ze záhlaví a každá hodnota z obsahu buňky.
Co se stane s hodnotami jako "true", "yes" nebo "null" v mém CSV?
YAML parsery interpretují holé hodnoty true, false, yes, no a null jako typované hodnoty, nikoli jako řetězce. Převodník tyto hodnoty uzavře do uvozovek, aby v výstupu zůstaly řetězci. Například buňka CSV obsahující "yes" se ve výstupu YAML stane '"yes"', čímž se zabrání tomu, aby konfigurační nástroj interpretoval tuto hodnotu jako logickou.
Lze YAML převést zpět na CSV?
Ano, pokud je YAML plochá sekvence slovníků (pole objektů se skalárními hodnotami). Vnořené struktury YAML s hluboko vnořenými slovníky nebo smíšenými typy nelze čistě zobrazit jako řádky CSV. Pro ploché struktury zpětný převod zvládají nástroje jako yq, Miller (mlr) nebo moduly yaml a csv v Pythonu.
Jaký je rozdíl mezi převodem CSV na YAML a CSV na JSON?
Oba formáty produkují strukturovaná data z plochého vstupu CSV. JSON používá složené závorky a hranatá závorky s přísnými pravidly uvozování. YAML používá odsazení a dvojtečky, podporuje komentáře a je snazší číst a upravovat ručně. Většina DevOps nástrojů (Kubernetes, Ansible, Docker Compose) očekává YAML. Většina webových API a nástrojů postavených na JavaScriptu očekává JSON.
Jak jsou ve výstupu zpracována čísla a data?
CSV považuje každou hodnotu za řetězec. YAML parsery automaticky rozpoznají neuvedená čísla (42, 3.14) a data ve formátu ISO (2024-01-15) jako příslušné typy. Pokud potřebujete, aby všechny hodnoty zůstaly řetězci, může převodník každou hodnotu uzavřít do uvozovek. Pokud chcete odvozování typů, ponechte hodnoty bez uvozovek a nechte YAML parser zpracovat rozlišení typů.
Zvládne převodník velké CSV soubory?
Nástroj běží zcela ve vašem prohlížeči, takže výkon závisí na dostupné paměti a limitech záložky prohlížeče. Soubory do několika megabajtů (desítky tisíc řádků) se na moderním hardwaru převedou bez problémů. Pro velmi velké soubory (100 MB+) použijte nástroj příkazové řádky, jako jsou moduly csv a yaml v Pythonu, Go's encoding/csv s gopkg.in/yaml.v3, nebo Miller (mlr), který dokáže streamovat data bez načítání všeho do paměti.
Produkuje nástroj výstup YAML 1.1 nebo YAML 1.2?
Tento nástroj produkuje výstup YAML 1.2. Hlavní rozdíl od YAML 1.1 spočívá v tom, že 1.2 odstranil „norský problém” (holé 'no' interpretováno jako logická hodnota false) a sjednotil kompatibilitu s JSON. Většina moderních parserů (Go yaml.v3, Python PyYAML se safe_load, Ruby Psych) podporuje YAML 1.2. Pokud váš nástroj vyžaduje kompatibilitu s verzí 1.1, výstup se ve většině případů zparsuje správně, protože 1.2 je zpětně kompatibilní pro běžné struktury.