ToolDeck

CSV to YAML

Конвертация CSV-данных в массив YAML-объектов

Попробовать пример

CSV Input

YAML Output

Работает локально · Безопасно вставлять секреты
Здесь появится YAML-вывод…

Что такое конвертация CSV в YAML?

Конвертация CSV в YAML преобразует табличные данные с разделителями-запятыми в формат YAML (YAML Ain't Markup Language). Каждая строка CSV-файла становится элементом YAML-последовательности, а каждый заголовок столбца — ключом в YAML-отображении. Результат — читаемый человеком документ с отступами, который инструменты конфигурации и пайплайны обработки данных могут разбирать напрямую без дополнительных файлов схем.

YAML был впервые предложен в 2001 году и достиг своей текущей спецификации (YAML 1.2) в 2009 году. Это формат конфигурации по умолчанию для манифестов Kubernetes, файлов Docker Compose, плейбуков 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 в YAML

Конфигурация Kubernetes и Docker Compose
Создавайте блоки переменных окружения, секции данных ConfigMap или определения сервисов Docker Compose из таблицы конфигурационных значений. Вставляйте YAML-вывод напрямую в файлы манифестов.
Данные для плейбуков Ansible
Конвертируйте 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 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 и 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, пакет gopkg.in/yaml.v3 с encoding/csv в Go или Miller (mlr), которые могут передавать данные потоком, не загружая всё в память.
Какой YAML генерируется — версии 1.1 или 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 обратно совместима с распространёнными структурами.