CSV থেকে YAML রূপান্তর হলো কমা-বিভাজিত টেবুলার ডেটাকে YAML (YAML Ain't Markup Language) ফরম্যাটে পরিবর্তন করার প্রক্রিয়া। CSV ফাইলের প্রতিটি সারি একটি YAML সিকোয়েন্সের এন্ট্রিতে পরিণত হয় এবং প্রতিটি কলাম হেডার একটি YAML ম্যাপিংয়ের কী হিসেবে ব্যবহৃত হয়। আউটপুট একটি human-readable, ইন্ডেন্টেশন-ভিত্তিক ডকুমেন্ট যা কনফিগারেশন টুল ও ডেটা পাইপলাইনগুলো অতিরিক্ত স্কিমা ফাইল ছাড়াই সরাসরি পার্স করতে পারে।
YAML প্রথম ২০০১ সালে প্রস্তাব করা হয়েছিল এবং ২০০৯ সালে এর বর্তমান স্পেসিফিকেশন (YAML 1.2) প্রকাশিত হয়। এটি Kubernetes ম্যানিফেস্ট, Docker Compose ফাইল, Ansible প্লেবুক, GitHub Actions ওয়ার্কফ্লো এবং অনেক CI/CD সিস্টেমের ডিফল্ট কনফিগারেশন ফরম্যাট। যখন আপনার উৎস ডেটা স্প্রেডশিট বা ডেটাবেজ এক্সপোর্টে থাকে, তখন CSV কে YAML এ রূপান্তর করাই হলো এই সিস্টেমগুলোর জন্য কনফিগ এন্ট্রি, সিড ডেটা ফিক্সচার বা পরীক্ষার ইনপুট তৈরির দ্রুততম উপায়।
একটি সঠিক CSV থেকে YAML কনভার্টারকে RFC 4180 পার্সিং নিয়ম পরিচালনা করতে হবে: কমা বা নতুন লাইনযুক্ত উদ্ধৃত ফিল্ড, escaped double quote এবং কাস্টম ডিলিমিটার। 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 ডায়ালেক্ট পরিচালনা
ডিলিমিটার হিসেবে কমা, সেমিকোলন, ট্যাব ও পাইপ স্বয়ংক্রিয়ভাবে শনাক্ত করে। escaped double quote, মাল্টিলাইন ফিল্ড ও BOM-প্রিফিক্সড UTF-8 ফাইলসহ RFC 4180 উদ্ধৃতি নিয়ম সমর্থন করে।
CSV থেকে YAML ব্যবহারের ক্ষেত্র
Kubernetes ও Docker Compose কনফিগ
কনফিগারেশন মানের স্প্রেডশিট থেকে পরিবেশ ভেরিয়েবল ব্লক, ConfigMap ডেটা সেকশন বা Docker Compose সার্ভিস ডেফিনিশন তৈরি করুন। YAML আউটপুট সরাসরি আপনার ম্যানিফেস্ট ফাইলে পেস্ট করুন।
Ansible প্লেবুক ডেটা
হোস্ট, রোল ও ভেরিয়েবলের CSV ইনভেন্টরিকে YAML-ফরম্যাট করা ভেরিয়েবল ফাইলে (group_vars, host_vars) রূপান্তর করুন যা Ansible কোনো কাস্টম পার্সিং প্লাগইন ছাড়াই নেটিভলি পড়তে পারে।
CI/CD পাইপলাইন কনফিগারেশন
বিল্ড ম্যাট্রিক্স এন্ট্রি, পরিবেশ ভেরিয়েবল বা ডিপ্লয়মেন্ট লক্ষ্যমাত্রার স্প্রেডশিটকে GitHub Actions, GitLab CI বা CircleCI YAML কনফিগ ব্লকে রূপান্তর করুন। পুনরাবৃত্তিমূলক ম্যাট্রিক্স সংজ্ঞার ম্যানুয়াল টাইপিং এড়ানো যায়।
ডেটাবেজ সিড ফিক্সচার
Rails, Django ও অন্যান্য ফ্রেমওয়ার্ক পরীক্ষার ফিক্সচার ও সিড ডেটার জন্য YAML ব্যবহার করে। একটি CSV ডেটাবেজ এক্সপোর্টকে YAML ফিক্সচার ফাইলে রূপান্তর করুন যা ORM সরাসরি পরীক্ষার ডেটাবেজে লোড করতে পারে।
ডেটা পাইপলাইন রূপান্তর
YAML ইনপুট গ্রহণ করে এমন ETL পাইপলাইনগুলো মধ্যবর্তী JSON ধাপ ছাড়াই রূপান্তরিত CSV ডেটা গ্রহণ করতে পারে। 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
সাধারণ পাঠ্য, প্রতি লাইনে একটি রেকর্ড। প্রতিটি মান একটি স্ট্রিং। কোনো শ্রেণীবিন্যাস, নেস্টিং বা মন্তব্য নেই। ন্যূনতম ফাইল আকার। স্প্রেডশিট, ডেটাবেজ ও কমান্ড-লাইন টুলগুলো সর্বজনীনভাবে সমর্থন করে। 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 সিকোয়েন্সে (অ্যারে) রাখা হয়। ফলাফল হলো অবজেক্টের একটি তালিকা যেখানে প্রতিটি কী হেডার থেকে আসে এবং প্রতিটি মান কক্ষের বিষয়বস্তু থেকে আসে।
আমার CSV-এ "true", "yes" বা "null"-এর মতো মানের কী হয়?
YAML পার্সার bare true, false, yes, no ও null-কে স্ট্রিংয়ের পরিবর্তে টাইপযুক্ত মান হিসেবে ব্যাখ্যা করে। কনভার্টার এই মানগুলো উদ্ধৃত করে যাতে সেগুলো আউটপুটে স্ট্রিং হিসেবে থাকে। উদাহরণস্বরূপ, "yes" ধারণকারী একটি CSV কক্ষ YAML আউটপুটে '"yes"' হয়ে যায়, আপনার কনফিগ টুল সেটিকে বুলিয়ান হিসেবে ব্যাখ্যা করা থেকে রক্ষা করে।
YAML কে আবার CSV-এ রূপান্তর করা যাবে?
হ্যাঁ, যতক্ষণ YAML একটি ম্যাপিংয়ের সমতল সিকোয়েন্স (স্কেলার মানসহ অবজেক্টের অ্যারে)। গভীরভাবে নেস্টেড ম্যাপ বা মিশ্র টাইপযুক্ত নেস্টেড YAML কাঠামোগুলো পরিষ্কারভাবে CSV সারি হিসেবে উপস্থাপন করা যায় না। সমতল কাঠামোর জন্য, yq, Miller (mlr) বা Python-এর yaml ও csv মডিউল বিপরীত রূপান্তর পরিচালনা করে।
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 ফাইল পরিচালনা করতে পারে?
টুলটি সম্পূর্ণ আপনার ব্রাউজারে চলে, তাই কার্যক্ষমতা নির্ভর করে উপলব্ধ মেমোরি ও ব্রাউজার ট্যাব সীমার উপর। কয়েক মেগাবাইট পর্যন্ত ফাইল (কয়েক হাজার সারি) আধুনিক হার্ডওয়্যারে সমস্যা ছাড়াই রূপান্তরিত হয়। খুব বড় ফাইলের জন্য (100MB+), Python-এর csv ও yaml মডিউল, gopkg.in/yaml.v3 সহ Go-এর encoding/csv, বা Miller (mlr) ব্যবহার করুন যা সবকিছু মেমোরিতে লোড না করেই ডেটা স্ট্রিম করতে পারে।
YAML 1.1 নাকি YAML 1.2 আউটপুট তৈরি হয়?
এই টুল YAML 1.2 আউটপুট তৈরি করে। YAML 1.1 থেকে মূল পার্থক্য হলো 1.2 "নরওয়ে সমস্যা" (bare 'no' কে boolean false হিসেবে ব্যাখ্যা করা) বাদ দিয়েছে এবং JSON সামঞ্জস্যতা সংযুক্ত করেছে। বেশিরভাগ আধুনিক পার্সার (Go yaml.v3, Python PyYAML with safe_load, Ruby Psych) YAML 1.2 সমর্থন করে। আপনার টুলের 1.1 সামঞ্জস্যতা প্রয়োজন হলেও আউটপুট প্রায় সব ক্ষেত্রে সঠিকভাবে পার্স হবে কারণ 1.2 সাধারণ কাঠামোর জন্য backward compatible।