Super Sale WeekClaude Skills — 20% OFF
Tips

Làm chủ tệp CSV bằng AI: Cấu trúc, Trường hợp sử dụng và Các ưu điểm chính

Powerdrill Bloom·
Làm chủ tệp CSV bằng AI: Cấu trúc, Trường hợp sử dụng và Các ưu điểm chính

Hầu như mọi hệ thống bạn sử dụng đều có thể xuất ra tệp CSV. Đó là lý do tại sao định dạng này vẫn tồn tại, và cũng là lý do tại sao nó gặp lỗi theo những cách không ai ngờ tới.

Bài viết này sẽ đề cập đến những gì định dạng này thực sự quy định, những điểm khác biệt trong cách triển khai thực tế, và những công việc nào thực sự phù hợp để sử dụng nó.

Mọi thứ về định dạng này đều bắt nguồn từ RFC 4180, tài liệu xuất bản vào tháng 10 năm 2005 đã đăng ký loại phương tiện text/csv. Nội dung tương tự cũng được lưu trữ tại IETF datatracker.

Tệp CSV thực chất là gì

Một tệp CSV là văn bản thuần túy được sắp xếp thành các bản ghi (record) và các trường (field). Không có bảng tính (workbook), không có lớp định dạng, và cũng không có công cụ tính toán công thức nào bên dưới nó.

RFC 4180 thẳng thắn một cách bất ngờ về trạng thái của chính nó. Tài liệu này nêu rõ rằng "không có đặc tả chính thức nào tồn tại, điều này dẫn đến nhiều cách diễn giải khác nhau về các tệp CSV."

Vì vậy, tài liệu này mô tả quy ước hơn là quy luật. Theo cách diễn đạt của chính nó, tài liệu thiết lập "định dạng dường như được tuân thủ bởi hầu hết các triển khai thực tế."

Chỉ một câu nói đó đã giải thích cho hầu hết những rắc rối liên quan đến CSV. Hai công cụ đều có thể xử lý hoàn toàn hợp lý nhưng vẫn không thống nhất được về cùng một tệp.

Bảy quy tắc trong đặc tả

RFC 4180 liệt kê bảy quy tắc. Chúng đủ ngắn để bạn ghi nhớ, và việc này rất đáng để làm.

  1. "Mỗi bản ghi nằm trên một dòng riêng biệt, được phân tách bằng ký tự xuống dòng (CRLF)."
  2. "Bản ghi cuối cùng trong tệp có thể có hoặc không có ký tự xuống dòng ở cuối."
  3. Có thể có một dòng tiêu đề tùy chọn ở dòng đầu tiên, với số lượng trường bằng số lượng trường của các bản ghi.
  4. Các trường được phân tách bằng dấu phẩy, và "mỗi dòng phải chứa cùng một số lượng trường trong toàn bộ tệp."
  5. Các trường có thể được hoặc không được đặt trong dấu ngoặc kép.
  6. "Các trường chứa ký tự xuống dòng (CRLF), dấu ngoặc kép và dấu phẩy phải được đặt trong dấu ngoặc kép."
  7. Một dấu ngoặc kép bên trong một trường được trích dẫn "phải được thoát (escape) bằng cách thêm một dấu ngoặc kép khác ngay trước nó."

Hai điều khoản trong các quy tắc đó gây ra nhiều rắc rối hơn tất cả các điều khoản còn lại cộng lại.

Khoảng trắng là dữ liệu. Quy tắc 4 nêu rõ rằng "khoảng trắng được coi là một phần của trường và không được bỏ qua." Một khoảng trắng thừa cũng tạo ra một giá trị khác.

Không có dấu phẩy ở cuối. Quy tắc tương tự cũng nêu "trường cuối cùng trong bản ghi không được có dấu phẩy theo sau." Dấu phẩy ở cuối ngụ ý rằng có thêm một trường trống.

Tại sao hai tệp CSV hợp lệ vẫn có thể không thống nhất

Quy tắc 5 chứa một sự thừa nhận dự báo trước hầu hết các lỗi trong thực tế. RFC 4180 lưu ý rằng "một số chương trình, chẳng hạn như Microsoft Excel, hoàn toàn không sử dụng dấu ngoặc kép."

Một khi việc sử dụng dấu ngoặc kép là tùy chọn, quy tắc thoát ký tự trong quy tắc 7 cũng trở thành có điều kiện. Một tệp được ghi bởi một công cụ này có thể được đọc theo cách khác bởi một công cụ khác mà không bên nào sai.

Cú pháp chính thức cho thấy ranh giới an toàn là vô cùng mong manh. Định nghĩa trường của đặc tả chỉ cho phép các dạng thoát ký tự hoặc không thoát ký tự, trong đó dạng thoát ký tự sẽ bao bọc các dấu phẩy, ký tự về đầu dòng (carriage return) và ký tự xuống dòng (line feed) bên trong dấu ngoặc kép.

Trong thực tế, đây là nơi mà chỉ một tên khách hàng có chứa dấu phẩy có thể biến một hàng thành hai hàng.

Lỗi này xảy ra một cách âm thầm, và đó là lý do tại sao nó gây ra hậu quả tốn kém. Không có thông báo lỗi nào xuất hiện. Bạn chỉ đơn giản nhận được một tệp có nhiều hàng hơn bình thường, và các hàng thừa trông vẫn có vẻ hợp lý.

Hai tham số gây ra hầu hết các lỗi

Đăng ký MIME trong RFC 4180 hoàn toàn không liệt kê bất kỳ tham số bắt buộc nào. Nó chỉ liệt kê chính xác hai tham số tùy chọn: charsetheader.

Cả hai đều là tùy chọn, và cả hai đều là những "nghi phạm" quen thuộc khi quá trình nhập dữ liệu (import) xảy ra lỗi.

Charset. Bản đăng ký lưu ý rằng "cách sử dụng phổ biến của CSV là US-ASCII," đồng thời cho phép các bộ ký tự khác. Không có gì bên trong tệp cho biết bộ ký tự nào đã được sử dụng, đó là lý do tại sao các tên có dấu và ký hiệu tiền tệ khi hiển thị lại bị lỗi font chữ (thành các ký tự rác).

Header. Quy tắc 3 cho phép dòng tiêu đề là tùy chọn, và bản đăng ký nói rằng sự hiện diện của nó "nên được chỉ định thông qua tham số header tùy chọn." Một tệp trống không (không có siêu dữ liệu) sẽ không cho bạn biết hàng đầu tiên là dữ liệu hay nhãn tiêu đề.

Vấn đề thứ ba hoàn toàn không nằm trong đặc tả, bởi vì đặc tả không đề cập gì đến nó: không có kiểu dữ liệu. Mọi trường đều là văn bản cho đến khi một công cụ xử lý phía sau tự phỏng đoán kiểu dữ liệu khác.

Khi nào tệp CSV là lựa chọn đúng đắn

Định dạng này chiến thắng nhờ khả năng tương thích cao (portability), và đó không phải là một điều nhỏ bé.

Di chuyển dữ liệu giữa các hệ thống không có điểm chung. Bất kỳ hai công cụ nào có thể đọc văn bản đều có thể trao đổi tệp CSV.

Lưu trữ những thứ bạn vẫn phải mở sau mười năm nữa. Không có trình đọc độc quyền nào có thể bị lỗi thời.

Truyền dữ liệu (streaming) và ghi thêm (appending). Vì mỗi bản ghi là một dòng, một tiến trình có thể ghi thêm các hàng mà không cần phải ghi lại toàn bộ tệp.

So sánh (diffing) và kiểm soát phiên bản (version control). Văn bản dạng dòng hoạt động tốt với các công cụ bạn đã sử dụng để quản lý mã nguồn.

Những hạn chế khi sử dụng tệp CSV

Chính sự đơn giản này đã loại bỏ những thứ mà bạn có thể đang phụ thuộc vào.

Những gì bạn mất Tại sao điều đó lại quan trọng
Kiểu dữ liệu Các số 0 ở đầu, ID dài và ngày tháng bị diễn giải lại khi nhập dữ liệu
Nhiều trang tính (sheet) Một tệp là một bảng, vì vậy các mối quan hệ phải nằm ở nơi khác
Công thức và định dạng Chỉ các giá trị đã tính toán mới được giữ lại sau khi xuất
Bảng mã được khai báo Không có gì bên trong tệp cho biết charset của nó
Ký tự phân tách được khai báo Các tệp xuất phân tách bằng dấu chấm phẩy rất phổ biến và vẫn được gọi là CSV

Không có điều nào trong số này là lỗi. Chúng là cái giá phải trả cho một định dạng không mang theo siêu dữ liệu (metadata). Bất cứ điều gì bạn cần bảo toàn đều phải được ghi chép bên ngoài chính tệp đó.

Tóm tắt các ưu điểm chính

Nếu bạn cần một cái nhìn ngắn gọn, thì đây chính là nó.

Tệp CSV là cách dễ tương thích, bền bỉ và dễ truyền tải nhất để di chuyển dữ liệu dạng bảng. Nó đạt được điều đó bằng cách không mang theo gì ngoài các giá trị.

Sự đánh đổi đó là xứng đáng khi hệ thống nhận dữ liệu chưa được xác định hoặc nằm ở tương lai xa. Nhưng đó là một sự đánh đổi tồi khi các kiểu dữ liệu, mối quan hệ hoặc định dạng cần phải được giữ nguyên vẹn sau quá trình chuyển đổi.

Người anh em họ phân tách bằng tab (TSV) đánh đổi vấn đề này lấy vấn đề khác. Bài viết đi kèm của chúng tôi về làm chủ tệp TSV sẽ đề cập đến những trường hợp mà sự thay đổi đó mang lại lợi ích.

Làm việc với tệp CSV bằng AI

Khoảng cách giữa "Tôi có tệp" và "Tôi có câu trả lời" là nơi tiêu tốn hầu hết thời gian. Khoảng cách đó giờ đây phần lớn đã có thể tự động hóa.

Powerdrill Bloom nhận tệp trực tiếp. Gói miễn phí của nó hỗ trợ tải lên các tệp Excel, CSV, PDF và tài liệu, cùng với việc tạo ra các thông tin chi tiết, biểu đồ và bản tóm tắt.

Ba trang tính năng đáp ứng các công việc phổ biến. Trợ lý AI cho CSV xử lý các câu hỏi về một tệp duy nhất. Các công cụ AI cho CSV bao gồm phạm vi rộng hơn, và gộp tệp CSV kết hợp các tệp xuất riêng lẻ lại với nhau. Trang phân tích TSV đề cập đến biến thể phân tách bằng tab.

Việc mô tả công việc bằng ngôn ngữ tự nhiên giúp tránh được những bước đi vòng vo thông thường. Bạn không cần phải viết một trình phân tích cú pháp (parser) hay đoán bảng mã, bạn chỉ cần gọi tên kết quả đầu ra mà mình cần.

Các gói dịch vụ có trên trang bảng giá, và gói miễn phí là đủ để thử nghiệm tính năng này trên một tệp xuất thực tế. Để dùng thử, hãy bắt đầu với Powerdrill Bloom.

Câu hỏi thường gặp

Có tiêu chuẩn CSV chính thức nào không?

RFC 4180 đã đăng ký loại phương tiện text/csv và ghi lại các thực hành phổ biến. Tài liệu này nói thẳng rằng không có đặc tả chính thức nào tồn tại, vì vậy hãy coi nó như một quy ước hơn là một tiêu chuẩn nghiêm ngặt.

Tại sao các số 0 ở đầu của tôi lại biến mất?

Định dạng này không mang theo kiểu dữ liệu, vì vậy một công cụ xử lý phía sau sẽ quyết định rằng một giá trị như 00123 là một con số. Việc đặt nó trong dấu ngoặc kép không phải lúc nào cũng ngăn được sự phỏng đoán này.

Tôi nên xử lý các dấu phẩy bên trong một giá trị như thế nào?

Hãy bao bọc trường đó trong dấu ngoặc kép, theo quy tắc 6. Nếu giá trị cũng chứa dấu ngoặc kép, hãy thoát nó bằng cách nhân đôi dấu ngoặc kép đó lên, theo quy tắc 7.

Các tệp phân tách bằng dấu chấm phẩy có còn là CSV không?

Chúng được tạo ra rộng rãi và được gọi phổ biến là CSV, nhưng đặc tả lại mô tả dấu phẩy. Hãy kiểm tra ký tự phân tách trước khi nhập thay vì tự giả định. Việc mở hai dòng đầu tiên trong một trình soạn thảo văn bản chỉ mất vài giây và sẽ giải quyết được vấn đề.

CSV hay TSV: tôi nên xuất định dạng nào?

Hãy lựa chọn dựa trên dữ liệu của bạn. Các ký tự tab ít xuất hiện bên trong các giá trị văn bản hơn so với dấu phẩy, điều này giúp giảm việc phải sử dụng dấu ngoặc kép. Tuy nhiên, các ký tự tab cũng dễ bị mất hơn khi một tệp được sao chép qua một trình soạn thảo.