CSV से YAML रूपांतरण, comma-separated tabular डेटा को YAML (YAML Ain't Markup Language) फ़ॉर्मैट में बदलता है। CSV फ़ाइल की प्रत्येक पंक्ति एक YAML अनुक्रम (sequence) में एक entry बन जाती है, और प्रत्येक कॉलम हेडर एक YAML मैपिंग में एक key बन जाता है। परिणाम एक मानव-पठनीय, इंडेंटेशन-आधारित दस्तावेज़ होता है जिसे कॉन्फ़िगरेशन उपकरण और डेटा पाइपलाइन बिना किसी अतिरिक्त स्कीमा फ़ाइल के सीधे पार्स कर सकते हैं।
YAML को पहली बार 2001 में प्रस्तावित किया गया था और यह 2009 में अपने वर्तमान विनिर्देश (YAML 1.2) तक पहुँचा। यह Kubernetes manifests, Docker Compose फ़ाइलों, Ansible playbooks, GitHub Actions workflows, और अनेक CI/CD प्रणालियों के लिए डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ॉर्मैट है। जब आपका स्रोत डेटा किसी स्प्रेडशीट या डेटाबेस निर्यात में हो, तो CSV से YAML में बदलना इन प्रणालियों के लिए कॉन्फ़िग प्रविष्टियाँ, seed data fixtures, या परीक्षण इनपुट तैयार करने का सबसे तेज़ तरीका है।
एक सही CSV से YAML कनवर्टर को RFC 4180 के पार्सिंग नियमों का पालन करना होता है: अल्पविराम या नई लाइन वाले उद्धृत फ़ील्ड, escaped double quotes, और अलग-अलग delimiter। 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 बनाता है जो किसी भी linter या स्कीमा सत्यापक से पास हो जाता है।
📋
किसी भी CSV प्रारूप को संभालें
comma, semicolon, tab और pipe को delimiter के रूप में auto-detect करता है। RFC 4180 उद्धरण नियमों का समर्थन करता है, जिसमें escaped double quotes, बहु-पंक्ति फ़ील्ड और BOM-prefixed UTF-8 फ़ाइलें शामिल हैं।
CSV से YAML के उपयोग के मामले
Kubernetes और Docker Compose कॉन्फ़िग
कॉन्फ़िगरेशन मानों की स्प्रेडशीट से environment variable ब्लॉक, ConfigMap डेटा अनुभाग, या Docker Compose सेवा परिभाषाएँ तैयार करें। YAML आउटपुट को सीधे अपनी manifest फ़ाइलों में चिपकाएँ।
Ansible playbook डेटा
होस्ट, रोल और वेरिएबल की CSV इन्वेंट्री को YAML-फ़ॉर्मैटेड वेरिएबल फ़ाइलों (group_vars, host_vars) में बदलें जिन्हें Ansible बिना किसी कस्टम पार्सिंग प्लगइन के नेटिव रूप से पढ़ता है।
CI/CD पाइपलाइन कॉन्फ़िगरेशन
बिल्ड मैट्रिक्स प्रविष्टियों, environment variables, या deployment targets की स्प्रेडशीट को GitHub Actions, GitLab CI, या CircleCI YAML कॉन्फ़िग ब्लॉक में बदलें। दोहराव वाली मैट्रिक्स परिभाषाओं की हाथ से टाइपिंग से बचाता है।
डेटाबेस seed fixtures
Rails, Django और अन्य फ्रेमवर्क परीक्षण fixtures और seed data के लिए YAML का उपयोग करते हैं। CSV डेटाबेस निर्यात को एक YAML fixture फ़ाइल में बदलें जिसे ORM सीधे परीक्षण डेटाबेस में लोड कर सके।
डेटा पाइपलाइन रूपांतरण
YAML इनपुट स्वीकार करने वाली ETL पाइपलाइन बिना किसी मध्यवर्ती JSON चरण के परिवर्तित CSV डेटा ग्रहण कर सकती है। dbt, Dagster और Prefect जैसे उपकरण पाइपलाइन परिभाषाओं और कॉन्फ़िग के लिए YAML का उपयोग करते हैं।
YAML सिंटैक्स सीखना
YAML में नए छात्र और डेवलपर परिचित CSV डेटा चिपकाकर देख सकते हैं कि सारणीबद्ध पंक्तियाँ अनुक्रमों और मैपिंग में कैसे बदलती हैं। इनपुट और आउटपुट की तुलना इंडेंटेशन नियमों, key-value सिंटैक्स और प्रकार प्रबंधन को स्पष्ट करती है।
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 एक सपाट, delimiter से अलग फ़ॉर्मैट है जिसमें कोई प्रकार जानकारी या पदानुक्रम नहीं होता। YAML, JSON का एक superset है जो नेस्टिंग के लिए इंडेंटेशन का उपयोग करता है, अनेक डेटा प्रकारों का समर्थन करता है, और टिप्पणियों की अनुमति देता है। चुनाव इस बात पर निर्भर करता है कि आपका अगला उपकरण किसे अपेक्षित करता है।
CSV
सादा पाठ, प्रति पंक्ति एक रिकॉर्ड। प्रत्येक मान एक स्ट्रिंग है। कोई पदानुक्रम, नेस्टिंग या टिप्पणियाँ नहीं। फ़ाइल आकार कम होता है। स्प्रेडशीट, डेटाबेस और command-line उपकरणों द्वारा सर्वत्र समर्थित। RFC 4180 द्वारा परिभाषित। उन प्रणालियों के बीच बड़े पैमाने पर सारणीबद्ध डेटा स्थानांतरण के लिए सर्वोत्तम जो कॉलम क्रम और प्रकारों पर सहमत हों।
YAML
इंडेंटेशन-आधारित फ़ॉर्मैट जिसमें स्ट्रिंग, पूर्णांक, फ्लोट, बूलियन, null, तिथि, अनुक्रम (ऐरे), और मैपिंग (ऑब्जेक्ट) के लिए नेटिव समर्थन है। # के साथ inline टिप्पणियों की अनुमति देता है। Kubernetes, Docker Compose, Ansible, GitHub Actions, और अधिकांश आधुनिक DevOps उपकरणों के लिए प्राथमिक कॉन्फ़िग फ़ॉर्मैट के रूप में उपयोग किया जाता है। YAML 1.2, JSON का superset है, इसलिए कोई भी वैध 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 मैपिंग (key-value ऑब्जेक्ट) बन जाती है, और सभी मैपिंग एक YAML अनुक्रम (ऐरे) में एकत्र होती हैं। परिणाम ऑब्जेक्ट की एक सूची होती है जहाँ प्रत्येक कुंजी हेडर से और प्रत्येक मान सेल की सामग्री से आती है।
मेरे CSV में "true", "yes", या "null" जैसे मानों का क्या होता है?
YAML पार्सर bare true, false, yes, no, और null को स्ट्रिंग के बजाय टाइप किए गए मानों के रूप में interpret करते हैं। कनवर्टर इन मानों को उद्धृत करता है ताकि वे आउटपुट में स्ट्रिंग बने रहें। उदाहरण के लिए, "yes" वाला CSV सेल YAML आउटपुट में '"yes"' बन जाता है, जिससे आपका कॉन्फ़िग उपकरण उसे बूलियन के रूप में न पढ़े।
क्या मैं YAML को वापस CSV में बदल सकता हूँ?
हाँ, जब तक YAML, मैपिंग का एक सपाट अनुक्रम हो (scalar मानों वाले ऑब्जेक्ट का ऐरे)। गहरी नेस्टेड मैप या मिश्रित प्रकारों वाली YAML संरचनाओं को CSV पंक्तियों के रूप में स्पष्ट रूप से नहीं दर्शाया जा सकता। सपाट संरचनाओं के लिए yq, Miller (mlr), या Python के yaml और csv मॉड्यूल विपरीत रूपांतरण संभालते हैं।
CSV से YAML और CSV से JSON में क्या अंतर है?
दोनों सपाट CSV इनपुट से संरचित डेटा बनाते हैं। JSON कड़े उद्धरण नियमों के साथ braces और brackets का उपयोग करता है। YAML इंडेंटेशन और colons का उपयोग करता है, टिप्पणियों का समर्थन करता है, और हाथ से पढ़ने तथा संपादित करने में सरल है। अधिकांश DevOps उपकरण (Kubernetes, Ansible, Docker Compose) YAML की अपेक्षा करते हैं। अधिकांश web API और JavaScript-आधारित उपकरण JSON की।
आउटपुट में संख्याएँ और तिथियाँ कैसे संभाली जाती हैं?
CSV प्रत्येक मान को स्ट्रिंग मानता है। YAML पार्सर बिना उद्धरण चिह्न वाली संख्याओं (42, 3.14) और ISO तिथियों (2024-01-15) को उनके संबंधित प्रकारों के रूप में स्वतः पहचान लेते हैं। यदि आप सभी मानों को स्ट्रिंग के रूप में रखना चाहते हैं, तो कनवर्टर प्रत्येक मान को उद्धृत कर सकता है। यदि आप प्रकार अनुमान चाहते हैं, तो मानों को बिना उद्धरण चिह्न के छोड़ दें और YAML पार्सर को प्रकार निर्धारण करने दें।
क्या कनवर्टर बड़ी CSV फ़ाइलों को संभाल सकता है?
यह उपकरण पूरी तरह आपके ब्राउज़र में चलता है, इसलिए प्रदर्शन उपलब्ध मेमोरी और ब्राउज़र टैब की सीमाओं पर निर्भर करता है। कुछ मेगाबाइट (दसों हज़ार पंक्तियाँ) तक की फ़ाइलें आधुनिक हार्डवेयर पर बिना किसी समस्या के परिवर्तित हो जाती हैं। बहुत बड़ी फ़ाइलों (100MB+) के लिए Python के csv और yaml मॉड्यूल, Go के encoding/csv एवं gopkg.in/yaml.v3, या Miller (mlr) जैसे CLI उपकरण उपयोग करें, जो सब कुछ मेमोरी में लोड किए बिना डेटा को स्ट्रीम के रूप में संसाधित करते हैं।
क्या YAML 1.1 या YAML 1.2 आउटपुट बनता है?
यह उपकरण YAML 1.2 आउटपुट बनाता है। YAML 1.1 से मुख्य अंतर यह है कि 1.2 में 'Norway problem' समाप्त हो गया (bare 'no' को boolean false के रूप में interpret करना) और JSON संगतता सुनिश्चित हुई। अधिकांश आधुनिक पार्सर (Go yaml.v3, Python PyYAML with safe_load, Ruby Psych) YAML 1.2 का समर्थन करते हैं। यदि आपके उपकरण को 1.1 संगतता चाहिए, तो आउटपुट लगभग सभी मामलों में सही ढंग से पार्स होगा क्योंकि common structures के लिए 1.2 backward compatible है।