قالببندی CSV (مقادیر جداشده با کاما) فرآیند یکنواختسازی متن جدولی خام است بهگونهای که جداکنندهها، نقلقولگذاری، فضاهای خالی و پایاندهندههای خط از یک مجموعه قانون ثابت پیروی کنند. RFC 4180، که در سال ۲۰۰۵ منتشر شد، پرکاربردترین استاندارد CSV را تعریف میکند: فیلدها با کاما جدا میشوند، رکوردها با CRLF پایان مییابند، و هر فیلدی که شامل کاما، گیومه دوتایی یا سطر جدید است باید در گیومه دوتایی محصور شود. یک قالببند CSV دادههای نامرتب یا ناسازگار را بازنویسی میکند تا با این قراردادها مطابقت داشته باشد.
فایلهای CSV در دنیای واقعی بهندرت در شکل تمیز میرسند. صادرات صفحهگسترده از Excel، Google Sheets و ابزارهای dump پایگاه داده هرکدام استراتژیهای نقلقولگذاری متفاوتی اعمال میکنند، فضاهای خالی را به شیوههای مختلف مدیریت میکنند، و ممکن است به جای کاما از سمیکالن یا تب استفاده کنند. وقتی این فایلها را به یک تجزیهکنندهای میدهید که انتظار ورودی دقیق RFC 4180 را دارد، نتیجه اغلب سطرهای شکسته، ستونهای جابجاشده یا از دست رفتن دادهها بدون هشدار است. قالببندی پیش از پردازش این مشکلات را زودهنگام شناسایی میکند.
یک قالببند CSV با یک مبدل CSV تفاوت دارد. قالببندی داده را در قالب CSV نگه میدارد. نقلقولگذاری را یکنواخت میکند، فضاهای اضافه را حذف میکند، ستونها را دوباره تنظیم میکند و بهصورت اختیاری جداکننده را تغییر میدهد. تبدیل، قالب را کاملاً عوض میکند و خروجی JSON، HTML، SQL یا Markdown تولید میکند.
چرا از این قالببند CSV استفاده کنیم؟
این ابزار CSV شما را کاملاً در مرورگر تجزیه و سریالسازی مجدد میکند. دادههای شما هرگز از دستگاه شما خارج نمیشوند.
⚡
قالببندی فوری
CSV را بچسبانید و خروجی تمیزشده را بلافاصله ببینید. قالببند در مرورگر در حین تایپ تجزیه و سریالسازی مجدد میکند.
🔒
پردازش با حفظ حریم خصوصی
تمام تجزیه و قالببندی در تب مرورگر شما انجام میشود. هیچ دادهای از طریق شبکه منتقل نمیشود. برای مجموعه دادههای اختصاصی، اطلاعات محرمانه و دادههایی که نباید از دستگاه شما خارج شوند ایمن است.
🔧
جداکنندههای قابل تنظیم
بین جداکنندههای کاما، تب، سمیکالن و پایپ جابجا شوید. ابزار جداکننده ورودی را بهطور خودکار تشخیص میدهد و به شما امکان میدهد جداکننده متفاوتی برای خروجی انتخاب کنید، که یکنواختسازی بین قالبها را ساده میکند.
📋
کپی و دانلود با یک کلیک
CSV قالببندیشده را در کلیپبورد کپی کنید یا بهصورت فایل دانلود کنید. آماده برای import در پایگاههای داده، صفحهگستردهها یا ETL pipeline بدون ویرایش اضافی.
موارد استفاده قالببند CSV
توسعه Frontend
فایلهای fixture از CSV که بهعنوان داده mock در کامپوننتهای React یا Vue استفاده میشوند را تمیز کنید. نقلقولگذاری ثابت از خطاهای تجزیه در حین build توسعه جلوگیری میکند.
ورودی داده Backend
صادرات CSV از APIهای شخص ثالث را پیش از ارسال به ETL pipeline یکنواخت کنید. حذف فضاهای اضافه و استانداردسازی جداکنندهها از باگهای جابجایی ستون جلوگیری میکند.
DevOps و CI/CD
فایلهای config از CSV یا داده seed که در سیستم کنترل نسخه ذخیره شدهاند را قالببندی کنید. قالببندی ثابت تفاوتهای اضافی را کاهش میدهد و بازبینی کد را سریعتر میکند.
QA و آزمون
فایلهای fixture آزمون CSV با الگوهای نقلقولگذاری و جداکننده مشخص آماده کنید. فایلهای ورودی قابل بازتولید نوشتن ادعاها در برابر خروجی تجزیهکننده را آسانتر میکند.
مهندسی داده
dumpهای CSV از پایگاههای داده قدیمی را پیش از بارگذاری در انبارهای داده مدرن پیشپردازش کنید. رفع مشکلات نقلقولگذاری و ناسازگاری جداکنندهها ساعتها اشکالزدایی را صرفهجویی میکند.
یادگیری و آموزش
با قوانین نقلقولگذاری RFC 4180 با چسباندن ورودیهای مختلف و مشاهده نحوه یکنواختسازی توسط قالببند آزمایش کنید. روشی عملی برای درک موارد لبهای CSV.
قوانین نقلقولگذاری و escape کردن CSV (RFC 4180)
RFC 4180 قوانین مشخصی برای زمان و نحوه نقلقولگذاری فیلدها تعریف میکند. شش سناریوی زیر مواردی را پوشش میدهند که رفتار نقلقولگذاری اهمیت دارد.
سناریو
مثال
قانون
Field contains delimiter
name,"Smith, Jr."
Wrap in double quotes
Field contains newline
"line1\nline2"
Wrap in double quotes
Field contains double quote
"She said ""hello"""
Double the quote character
Field is empty
,,
Two consecutive delimiters
Field has leading spaces
" value"
Quotes preserve whitespace
Field is numeric
42
No quotes required unless forced
مقایسه جداکنندههای CSV
انتخاب جداکننده بر سازگاری، خوانایی و تعداد دفعاتی که به فیلدهای نقلقولگذاریشده نیاز دارید تأثیر میگذارد.
کاما (,)
پیشفرض RFC 4180. توسط هر تجزیهکننده CSV و صفحهگستردهای پشتیبانی میشود. وقتی مقادیر فیلد شامل کاما هستند نیاز به نقلقولگذاری دارد، که در دادههای آدرس و متن رایج است.
تب (\t)
در فایلهای TSV (مقادیر جداشده با تب) استفاده میشود. کاراکترهای تب بهندرت در دادههای فیلد ظاهر میشوند، بنابراین نقلقولگذاری بهندرت لازم است. در بیوانفورماتیک و صادرات پایگاه داده رایج است.
سمیکالن (;)
استاندارد در صادرات CSV با locale اروپایی (آلمان، فرانسه، برزیل) که در آنها کاما بهعنوان جداکننده اعشار استفاده میشود. Excel از سمیکالن استفاده میکند وقتی locale سیستم از کاما برای اعشار استفاده میکند.
پایپ (|)
در متن طبیعی نادر است، که آن را گزینه خوبی برای دادههای نامرتب میکند که در آنها کاما و سمیکالن در مقادیر فیلد ظاهر میشوند. در صادرات سیستمهای mainframe و قدیمی رایج است.
نمونههای کد
این مثالها نشان میدهند که چگونه CSV نامرتب را تجزیه و با قالببندی ثابت در زبانهای مختلف سریالسازی مجدد کنیم. هر قطعه کد حذف فضاهای اضافه، یکنواختسازی جداکننده و نقلقولگذاری را مدیریت میکند.
JavaScript (Node.js)
import { parse, unparse } from 'papaparse'
const messy = `name, age ,city
Alice , 30, Berlin
Bob,25 , " Tokyo "`
// Parse with trimming, then re-serialize with consistent formatting
const parsed = parse(messy, {
header: true,
skipEmptyLines: true,
transformHeader: h => h.trim(),
transform: v => v.trim(),
})
const clean = unparse(parsed.data, { quotes: true })
console.log(clean)
// → "name","age","city"
// → "Alice","30","Berlin"
// → "Bob","25","Tokyo"
Python
import csv
import io
messy = """name, age ,city
Alice , 30, Berlin
Bob,25 , " Tokyo " """
reader = csv.DictReader(io.StringIO(messy), skipinitialspace=True)
output = io.StringIO()
writer = csv.DictWriter(
output,
fieldnames=[f.strip() for f in reader.fieldnames],
quoting=csv.QUOTE_ALL,
)
writer.writeheader()
for row in reader:
writer.writerow({k.strip(): v.strip() for k, v in row.items()})
print(output.getvalue())
# → "name","age","city"
# → "Alice","30","Berlin"
# → "Bob","25","Tokyo"
Go
package main
import (
"encoding/csv"
"fmt"
"strings"
)
func main() {
input := "name,age,city\nAlice,30,Berlin\nBob,25,Tokyo"
r := csv.NewReader(strings.NewReader(input))
records, _ := r.ReadAll()
var buf strings.Builder
w := csv.NewWriter(&buf)
w.UseCRLF = true // RFC 4180 line endings
for _, record := range records {
_ = w.Write(record)
}
w.Flush()
fmt.Print(buf.String())
// → name,age,city\r\n
// → Alice,30,Berlin\r\n
// → Bob,25,Tokyo\r\n
}
CLI (csvformat from csvkit)
# Re-format a CSV file with csvkit (Python-based)
csvformat -D ";" input.csv > output.csv
# Convert tabs to commas
csvformat -t input.tsv > output.csv
# Force-quote all fields
csvformat -U 1 input.csv > quoted.csv
# Using Miller (mlr) to normalize
mlr --icsv --ocsv --quote-all cat input.csv > clean.csv
سوالات متداول
یک قالببند CSV چه کاری انجام میدهد؟
یک قالببند CSV متن CSV خام را تجزیه میکند، نقلقولگذاری دور فیلدها را یکنواخت میکند، فضاهای اضافه غیرضروری را حذف میکند و داده را با جداکننده و سبک پایاندهنده خط ثابت سریالسازی مجدد میکند. خروجی یک فایل CSV تمیز است که با RFC 4180 یا قوانین قالببندی انتخابشده شما مطابقت دارد.
قالببندی CSV با اعتبارسنجی CSV چه تفاوتی دارد؟
اعتبارسنجی بررسی میکند که آیا یک فایل CSV با مجموعهای از قوانین مطابقت دارد و خطاها را گزارش میدهد. قالببندی فراتر میرود: فایل را بازنویسی میکند تا آن مشکلات را برطرف کند. یک اعتبارسنج به شما میگوید که سطر ۵ یک کاما بدون نقلقول دارد. یک قالببند آن را با افزودن نقلقول دور فیلد برطرف میکند.
چرا باید فایلهای CSV را پیش از import قالببندی کنم؟
ابزارهای import پایگاه داده، ETL pipelineها و نرمافزار صفحهگسترده هرکدام قوانین تجزیه CSV کمی متفاوتی دارند. یک فیلد بدون نقلقول با یک کاما در آن در تجزیهکنندههای دقیق به دو ستون تقسیم میشود. قالببندی CSV برای پیروی از RFC 4180 پیش از import از این خطاهای جابجایی ستون و خرابی داده بدون هشدار جلوگیری میکند.
آیا دادههایم هنگام استفاده از این ابزار به سرور ارسال میشوند؟
خیر. تمام تجزیه و قالببندی در مرورگر شما با استفاده از JavaScript انجام میشود. دادههای CSV شما روی دستگاه شما باقی میمانند و هرگز از طریق شبکه منتقل نمیشوند. میتوانید این را با باز کردن تب Network مرورگر در حین استفاده از ابزار تأیید کنید.
آیا میتوانم جداکننده را هنگام قالببندی تغییر دهم؟
بله. ابزار جداکننده ورودی (کاما، تب، سمیکالن یا پایپ) را بهطور خودکار تشخیص میدهد و به شما امکان میدهد جداکننده متفاوتی برای خروجی انتخاب کنید. این هنگام تبدیل بین قالبهای CSV منطقهای یا جابجایی از TSV به CSV استاندارد مفید است.
ابزار چگونه فیلدهای نقلقولگذاریشده با سطرهای جدید تعبیهشده را مدیریت میکند؟
طبق RFC 4180، فیلدهایی که شامل سطرهای جدید هستند باید در گیومه دوتایی محصور شوند. قالببند این سطرهای جدید تعبیهشده را حفظ میکند و اطمینان میدهد که گیومههای احاطهکننده وجود دارند. اگر یک فیلد در ورودی سطر جدید بدون نقلقول داشته باشد، قالببند در حین سریالسازی مجدد آن را در نقلقول قرار میدهد.
حداکثر اندازه فایلی که این ابزار میتواند مدیریت کند چقدر است؟
چون ابزار در مرورگر شما اجرا میشود، محدودیت عملی به حافظه موجود دستگاه شما بستگی دارد. فایلهای تا ۱۰ تا ۲۰ مگابایت معمولاً روی دستگاههای مدرن بدون مشکل پردازش میشوند. برای فایلهای بزرگتر، یک ابزار خط فرمان مانند csvkit یا Miller گزینه بهتری است.