Định dạng CSV (Comma-Separated Values) là quá trình chuẩn hóa văn bản dạng bảng thô sao cho dấu phân cách, trích dẫn, khoảng trắng và ký tự kết thúc dòng tuân theo một tập quy tắc nhất quán. RFC 4180, được công bố năm 2005, định nghĩa tiêu chuẩn CSV được áp dụng rộng rãi nhất: các trường phân cách bằng dấu phẩy, bản ghi kết thúc bằng CRLF, và bất kỳ trường nào chứa dấu phẩy, dấu ngoặc kép hoặc ký tự xuống dòng đều được bao trong dấu ngoặc kép. Một công cụ định dạng CSV nhận dữ liệu CSV lộn xộn hoặc không nhất quán và viết lại để phù hợp với các quy ước này.
Các tệp CSV thực tế hiếm khi có dạng sạch sẽ. Xuất dữ liệu từ Excel, Google Sheets và các tiện ích kết xuất cơ sở dữ liệu đều áp dụng các chiến lược trích dẫn khác nhau, xử lý khoảng trắng theo cách riêng và có thể dùng dấu chấm phẩy hoặc tab thay vì dấu phẩy. Khi bạn đưa các tệp này vào một trình phân tích cú pháp yêu cầu đầu vào RFC 4180 nghiêm ngặt, kết quả thường là các hàng bị hỏng, cột bị lệch hoặc mất dữ liệu âm thầm. Định dạng trước khi xử lý giúp phát hiện sớm các vấn đề này.
Công cụ định dạng CSV khác với công cụ chuyển đổi CSV. Định dạng giữ nguyên dữ liệu ở dạng CSV. Nó chuẩn hóa trích dẫn, xóa khoảng trắng thừa, căn chỉnh lại các cột và tùy chọn đổi dấu phân cách. Chuyển đổi thay đổi hoàn toàn định dạng, tạo ra đầu ra JSON, HTML, SQL hoặc Markdown.
Tại sao dùng công cụ định dạng CSV này?
Công cụ này phân tích và tái tạo dữ liệu CSV của bạn hoàn toàn trong trình duyệt. Dữ liệu của bạn không bao giờ rời khỏi máy bạn.
⚡
Định dạng tức thì
Dán CSV và xem kết quả đã được làm sạch ngay lập tức. Công cụ định dạng phân tích và tái tạo trong trình duyệt khi bạn gõ.
🔒
Xử lý ưu tiên quyền riêng tư
Toàn bộ quá trình phân tích và định dạng diễn ra trong tab trình duyệt của bạn. Không có dữ liệu nào được truyền qua mạng. An toàn cho các tập dữ liệu độc quyền, thông tin xác thực và PII không được phép rời khỏi máy bạn.
🔧
Dấu phân cách có thể cấu hình
Chuyển đổi giữa dấu phẩy, tab, dấu chấm phẩy và dấu gạch đứng. Công cụ tự động phát hiện dấu phân cách đầu vào và cho phép bạn chọn dấu phân cách khác cho đầu ra, giúp chuẩn hóa giữa các định dạng trở nên đơn giản.
📋
Sao chép và tải xuống một cú nhấp
Sao chép CSV đã định dạng vào bảng nhớ tạm hoặc tải xuống dưới dạng tệp. Sẵn sàng để nhập vào cơ sở dữ liệu, bảng tính hoặc quy trình dữ liệu mà không cần chỉnh sửa thêm.
Các trường hợp sử dụng công cụ định dạng CSV
Phát triển Frontend
Làm sạch các tệp CSV fixture được dùng làm dữ liệu giả trong các thành phần React hoặc Vue. Trích dẫn nhất quán ngăn ngừa lỗi phân tích cú pháp trong quá trình build phát triển.
Nhập dữ liệu Backend
Chuẩn hóa các xuất CSV từ API của bên thứ ba trước khi đưa vào quy trình ETL của bạn. Xóa khoảng trắng và chuẩn hóa dấu phân cách ngăn ngừa lỗi lệch cột.
DevOps và CI/CD
Định dạng các tệp cấu hình CSV hoặc dữ liệu seed được kiểm tra vào quản lý phiên bản. Định dạng nhất quán giảm nhiễu diff và giúp đánh giá mã nhanh hơn.
QA và Kiểm thử
Chuẩn bị các tệp CSV kiểm thử với các mẫu trích dẫn và dấu phân cách đã biết. Các tệp đầu vào có thể tái tạo giúp viết các kiểm định đối với đầu ra trình phân tích cú pháp dễ dàng hơn.
Kỹ thuật dữ liệu
Xử lý trước các kết xuất CSV từ cơ sở dữ liệu cũ trước khi tải vào các kho dữ liệu hiện đại. Khắc phục các vấn đề trích dẫn và dấu phân cách không khớp giúp tiết kiệm nhiều giờ gỡ lỗi.
Học tập và Giáo dục
Thử nghiệm các quy tắc trích dẫn RFC 4180 bằng cách dán các đầu vào khác nhau và quan sát cách công cụ định dạng chuẩn hóa chúng. Cách thực tế để hiểu các trường hợp đặc biệt của CSV.
Quy tắc trích dẫn và thoát ký tự CSV (RFC 4180)
RFC 4180 định nghĩa các quy tắc cụ thể về thời điểm và cách thức các trường phải được trích dẫn. Sáu tình huống dưới đây bao gồm các trường hợp mà hành vi trích dẫn quan trọng.
Tình huống
Ví dụ
Quy tắc
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
So sánh dấu phân cách CSV
Việc chọn dấu phân cách ảnh hưởng đến khả năng tương thích, khả năng đọc và tần suất bạn cần các trường được trích dẫn.
Dấu phẩy (,)
Mặc định theo RFC 4180. Được hỗ trợ bởi mọi trình phân tích cú pháp CSV và bảng tính. Cần trích dẫn khi giá trị trường chứa dấu phẩy, điều phổ biến trong dữ liệu địa chỉ và văn bản.
Tab (\t)
Được dùng trong các tệp TSV (Tab-Separated Values). Ký tự tab hiếm khi xuất hiện trong dữ liệu trường, vì vậy trích dẫn ít khi cần thiết. Phổ biến trong tin sinh học và xuất cơ sở dữ liệu.
Dấu chấm phẩy (;)
Tiêu chuẩn trong các xuất CSV theo ngôn ngữ châu Âu (Đức, Pháp, Brazil) nơi dấu phẩy được dùng làm dấu thập phân. Excel dùng dấu chấm phẩy khi ngôn ngữ hệ thống sử dụng dấu phẩy thập phân.
Dấu gạch đứng (|)
Hiếm trong văn bản tự nhiên, khiến nó là lựa chọn tốt cho dữ liệu lộn xộn nơi dấu phẩy và dấu chấm phẩy xuất hiện trong giá trị trường. Phổ biến trong các xuất hệ thống mainframe và cũ.
Ví dụ mã
Các ví dụ này cho thấy cách phân tích CSV lộn xộn và tái tạo với định dạng nhất quán trong các ngôn ngữ lập trình khác nhau. Mỗi đoạn mã xử lý việc xóa khoảng trắng, chuẩn hóa dấu phân cách và trích dẫn.
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
Câu hỏi thường gặp
Công cụ định dạng CSV làm gì?
Công cụ định dạng CSV phân tích văn bản CSV thô, chuẩn hóa trích dẫn xung quanh các trường, xóa khoảng trắng không cần thiết và tái tạo dữ liệu với dấu phân cách và kiểu kết thúc dòng nhất quán. Kết quả là tệp CSV sạch tuân theo RFC 4180 hoặc các quy tắc định dạng bạn chọn.
Định dạng CSV khác với xác thực CSV như thế nào?
Xác thực kiểm tra xem tệp CSV có tuân theo một tập quy tắc không và báo cáo lỗi. Định dạng đi xa hơn: nó viết lại tệp để khắc phục các vấn đề đó. Trình xác thực cho bạn biết hàng 5 có dấu phẩy không được trích dẫn. Trình định dạng khắc phục bằng cách thêm dấu ngoặc kép xung quanh trường.
Tại sao tôi cần định dạng tệp CSV trước khi nhập?
Các công cụ nhập cơ sở dữ liệu, quy trình ETL và phần mềm bảng tính đều có các quy tắc phân tích CSV hơi khác nhau. Một trường không được trích dẫn chứa dấu phẩy sẽ bị tách thành hai cột trong các trình phân tích cú pháp nghiêm ngặt. Định dạng CSV theo RFC 4180 trước khi nhập ngăn ngừa các lỗi lệch cột và làm hỏng dữ liệu âm thầm này.
Dữ liệu của tôi có được gửi đến máy chủ khi dùng công cụ này không?
Không. Toàn bộ quá trình phân tích và định dạng diễn ra trong trình duyệt của bạn bằng JavaScript. Dữ liệu CSV của bạn ở lại trên máy và không bao giờ được truyền qua mạng. Bạn có thể xác minh điều này bằng cách mở tab Mạng của trình duyệt trong khi dùng công cụ.
Tôi có thể thay đổi dấu phân cách khi định dạng không?
Có. Công cụ tự động phát hiện dấu phân cách đầu vào (dấu phẩy, tab, dấu chấm phẩy hoặc dấu gạch đứng) và cho phép bạn chọn dấu phân cách khác cho đầu ra. Điều này hữu ích khi chuyển đổi giữa các định dạng CSV theo vùng hoặc chuyển từ TSV sang CSV tiêu chuẩn.
Công cụ xử lý các trường được trích dẫn có ký tự xuống dòng nhúng như thế nào?
Theo RFC 4180, các trường chứa ký tự xuống dòng phải được bao trong dấu ngoặc kép. Công cụ định dạng giữ nguyên các ký tự xuống dòng nhúng này và đảm bảo dấu ngoặc kép bao quanh có mặt. Nếu một trường có ký tự xuống dòng không được trích dẫn trong đầu vào, công cụ định dạng bao nó trong dấu ngoặc kép khi tái tạo.
Kích thước tệp tối đa công cụ này có thể xử lý là bao nhiêu?
Vì công cụ chạy trong trình duyệt, giới hạn thực tế phụ thuộc vào bộ nhớ khả dụng của thiết bị bạn. Các tệp lên đến 10-20 MB thường xử lý mà không có vấn đề trên các máy hiện đại. Đối với các tệp lớn hơn, công cụ dòng lệnh như csvkit hoặc Miller là lựa chọn tốt hơn.