Конвертація CSV у YAML перетворює табличні дані з роздільниками на формат YAML (YAML Ain't Markup Language). Кожен рядок CSV-файлу стає елементом послідовності YAML, а кожен заголовок стовпця відображається на ключ у відображенні YAML. Результатом є зручний для читання документ на основі відступів, який конфігураційні інструменти та конвеєри обробки даних можуть парсити безпосередньо без додаткових файлів схеми.
YAML вперше запропонований у 2001 році, а поточна специфікація (YAML 1.2) прийнята у 2009 році. Це формат конфігурації за замовчуванням для маніфестів Kubernetes, файлів Docker Compose, playbook-ів Ansible, робочих процесів GitHub Actions і більшості CI/CD-систем. Коли вихідні дані зберігаються в таблиці або експорті бази даних, конвертація CSV у YAML — найшвидший спосіб згенерувати записи конфігурації, фікстури початкових даних або тестові вхідні дані для цих систем.
Правильний конвертер CSV у YAML повинен дотримуватись правил парсингу RFC 4180: поля в лапках, що містять коми або переноси рядка, екрановані подвійні лапки та різні роздільники. На стороні YAML рядки, схожі на булеві значення (yes, no, true, false), числа або null, мають братися в лапки, щоб запобігти приведенню типів парсерами YAML. Конвертер також повинен обробляти вміст Unicode і виводити коректний UTF-8, оскільки YAML 1.2 вимагає UTF-8 як кодування за замовчуванням.
Навіщо використовувати конвертер CSV у YAML?
Ручне написання YAML зі даних таблиці є виснажливим і схильним до помилок. Неправильний відступ або неекранований спеціальний символ роблять YAML недійсним, що призводить до збоїв у розгортанні конфігурацій або імпорті даних. Цей конвертер парсить поля CSV, відображає заголовки на ключі та генерує YAML-вивід із правильними відступами і лапками.
⚡
Миттєва конвертація в браузері
Вставте або завантажте CSV-дані та отримайте коректний YAML-вивід негайно. Без CLI-інструментів для встановлення, без бібліотек для підключення, без кроку збірки.
🔒
Збереження конфіденційності даних
Весь парсинг і конвертація виконуються локально у вашому браузері за допомогою JavaScript. Ваші CSV-дані ніколи не покидають ваш пристрій, ніколи не надсилаються на сервер і ніколи не зберігаються та не журналюються.
🎯
Коректно відформатований YAML
Вивід використовує правильні відступи, бере в лапки рядки, які інакше були б помилково інтерпретовані як булеві або числа, та генерує коректний YAML 1.2, що проходить будь-який лінтер або валідатор схеми.
📋
Підтримка будь-якого діалекту CSV
Автоматично визначає коми, крапки з комою, табуляції та вертикальні риски як роздільники. Підтримує правила цитування RFC 4180, включаючи екрановані подвійні лапки, багаторядкові поля та файли UTF-8 з BOM-префіксом.
Сценарії використання CSV to YAML
Конфігурація Kubernetes і Docker Compose
Генеруйте блоки змінних середовища, розділи даних ConfigMap або визначення сервісів Docker Compose зі таблиці конфігураційних значень. Вставляйте YAML-вивід безпосередньо у ваші файли маніфесту.
Дані для Ansible playbook
Конвертуйте CSV-інвентаризацію хостів, ролей та змінних у файли змінних у форматі YAML (group_vars, host_vars), які Ansible зчитує нативно без жодних власних плагінів парсингу.
Конфігурація CI/CD-конвеєрів
Перетворюйте таблиці записів матриці збірки, змінних середовища або цілей розгортання на блоки YAML-конфігурації для GitHub Actions, GitLab CI або CircleCI. Дозволяє уникнути ручного введення повторюваних визначень матриці.
Фікстури початкових даних бази даних
Rails, Django та інші фреймворки використовують YAML для тестових фікстур і початкових даних. Конвертуйте CSV-експорт бази даних у файл YAML-фікстур, який ORM може безпосередньо завантажити в тестову базу даних.
Трансформація в конвеєрах обробки даних
ETL-конвеєри, що приймають YAML-вхід, можуть завантажувати конвертовані CSV-дані без проміжного кроку через JSON. Такі інструменти, як dbt, Dagster і Prefect, використовують YAML для визначення конвеєрів і конфігурації.
Вивчення синтаксису YAML
Студенти та розробники, які починають роботу з YAML, можуть вставити знайомі CSV-дані та побачити, як табличні рядки перетворюються на послідовності та відображення. Порівняння вхідних і вихідних даних пояснює правила відступів, синтаксис «ключ — значення» та обробку типів.
Довідник відображення CSV у YAML
Кожен структурний елемент CSV-файлу має прямий аналог у YAML.
Концепція CSV
Еквівалент YAML
Деталі
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 проти YAML
CSV — плаский формат із роздільниками без інформації про типи або ієрархії. YAML є надмножиною JSON, що використовує відступи для вкладення, підтримує декілька типів даних і дозволяє коментарі. Вибір залежить від того, що очікує ваш інструмент-споживач.
CSV
Звичайний текст, один запис на рядок. Кожне значення є рядком. Без ієрархії, вкладення або коментарів. Мінімальний розмір файлу. Підтримується практично в усіх таблицях, базах даних і CLI-інструментах. Визначений RFC 4180. Найкраще підходить для масового передавання табличних даних між системами, які погоджуються щодо порядку стовпців і типів.
YAML
Формат на основі відступів із нативною підтримкою рядків, цілих чисел, чисел з плаваючою точкою, булевих значень, null, дат, послідовностей (масивів) і відображень (об'єктів). Дозволяє однорядкові коментарі з #. Використовується як основний формат конфігурації для Kubernetes, Docker Compose, Ansible, GitHub Actions і більшості сучасних DevOps-інструментів. YAML 1.2 є надмножиною JSON, тому будь-який коректний JSON є також коректним YAML.
Приклади коду
Робочі приклади на Node.js, Python, Go та CLI-інструментах. Кожен зчитує рядок заголовка CSV як ключі YAML, відображає кожен рядок даних на елемент послідовності та обробляє лапки для значень з неоднозначним типом.
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
Часті запитання
Як працює конвертація CSV у YAML?
Конвертер зчитує перший рядок як заголовки стовпців. Кожен наступний рядок стає відображенням YAML (об'єктом «ключ — значення»), а всі відображення збираються у послідовність YAML (масив). Результатом є список об'єктів, де кожен ключ береться із заголовка, а кожне значення — зі вмісту відповідної клітинки.
Що відбувається зі значеннями на кшталт «true», «yes» або «null» у моєму CSV?
Парсери YAML інтерпретують голі true, false, yes, no та null як типізовані значення, а не рядки. Конвертер бере ці значення в лапки, щоб вони залишалися рядками у виводі. Наприклад, клітинка CSV зі значенням «yes» стає '"yes"' у YAML-виводі, запобігаючи інтерпретації конфігураційним інструментом як булевого значення.
Чи можна конвертувати YAML назад у CSV?
Так, якщо YAML є пласкою послідовністю відображень (масив об'єктів зі скалярними значеннями). Вкладені структури YAML із глибоко вкладеними відображеннями або змішаними типами не можна коректно представити у вигляді рядків CSV. Для пласких структур такі інструменти, як yq, Miller (mlr), або модулі yaml і csv у Python, виконують зворотну конвертацію.
У чому різниця між конвертацією CSV у YAML та CSV у JSON?
Обидва перетворення виробляють структуровані дані з плаского CSV-вводу. JSON використовує фігурні дужки і квадратні скобки з суворими правилами цитування. YAML використовує відступи і двокрапки, підтримує коментарі та зручніший для читання і редагування вручну. Більшість DevOps-інструментів (Kubernetes, Ansible, Docker Compose) очікують YAML. Більшість веб-API та інструментів на основі JavaScript очікують JSON.
Як обробляються числа та дати у виводі?
CSV обробляє кожне значення як рядок. Парсери YAML автоматично розпізнають числа без лапок (42, 3.14) та дати в форматі ISO (2024-01-15) як відповідні типи. Якщо вам потрібно, щоб усі значення залишалися рядками, конвертер може брати кожне значення в лапки. Якщо ви хочете виведення типів, залишайте значення без лапок і дозвольте парсеру YAML вирішувати питання типів.
Чи справляється конвертер з великими CSV-файлами?
Інструмент повністю працює у вашому браузері, тому продуктивність залежить від доступної пам'яті та обмежень вкладки браузера. Файли розміром до кількох мегабайтів (десятки тисяч рядків) конвертуються без проблем на сучасному обладнанні. Для дуже великих файлів (100 МБ і більше) використовуйте CLI-інструмент, наприклад модулі csv та yaml у Python, пакет encoding/csv з gopkg.in/yaml.v3 на Go або Miller (mlr), які можуть потоково передавати дані без завантаження всього файлу в пам'ять.
Який вивід виробляється — YAML 1.1 чи YAML 1.2?
Цей інструмент виробляє вивід у форматі YAML 1.2. Головна відмінність від YAML 1.1 полягає в тому, що версія 1.2 усунула «норвезьку проблему» (голе 'no', що інтерпретується як булеве false) та узгодила сумісність із JSON. Більшість сучасних парсерів (Go yaml.v3, Python PyYAML з safe_load, Ruby Psych) підтримують YAML 1.2. Якщо ваш інструмент вимагає сумісності з версією 1.1, вивід у більшості випадків все одно буде коректно розпарсений, оскільки 1.2 зворотно сумісний з поширеними структурами.