CSV là gì? Định dạng, quy tắc, ứng dụng và những cạm bẫy phổ biến

CSV là gì? Định dạng, quy tắc, ứng dụng và những cạm bẫy phổ biến

API Scraping không Scrapeless có thể trả về dữ liệu web có cấu trúc ở dạng CSV cho bảng tính, nhập cơ sở dữ liệu và quy trình phân tích.

Tóm tắt

  • CSV lưu trữ một bảng dưới dạng văn bản thuần túy. Mỗi bản ghi thường là một dòng, và một dấu phân cách tách biệt các trường trong bản ghi đó.
  • CSV là một họ các phương ngữ. RFC 4180 tài liệu một tiêu chuẩn cơ bản được sử dụng rộng rãi về dấu phẩy và dấu ngoặc kép, nhưng các tệp thực tế khác nhau về dấu phân cách, mã hóa, ký tự dòng, tiêu đề và quy ước null.
  • Dấu ngoặc kép bảo vệ các ký tự đặc biệt. Một trường chứa dấu phẩy, dấu ngoặc kép hoặc ngắt dòng nên được bao quanh bằng dấu ngoặc kép đôi, và một dấu ngoặc kép đôi nguyên văn được biểu diễn bằng hai dấu ngoặc kép đôi.
  • CSV không mang theo một sơ đồ đầy đủ. Các loại, trường bắt buộc, ngày tháng, null, đơn vị và quy tắc định danh phải đến từ tài liệu, sơ đồ bên lề hoặc hệ thống nhận.
  • Nhập khẩu an toàn cần kiểm tra trước khi chuyển đổi. Phát hiện phương ngữ, bảo tồn văn bản gốc, xác thực số lượng cột, và coi các công thức bảng tính như một vấn đề an ninh.

Tệp CSV là gì?

CSV là viết tắt của giá trị phân cách bằng dấu phẩy. Một tệp CSV đại diện cho dữ liệu bảng dưới dạng văn bản: các dòng đại diện cho các bản ghi và các dấu phân cách chia mỗi bản ghi thành các trường. Dòng đầu tiên thường chứa tên cột, mặc dù tiêu đề là tùy chọn. Phần mở rộng tệp thường là .csv, và loại phương tiện đã được đăng ký là text/csv.

Định dạng quen thuộc cố ý đơn giản. Một xuất dữ liệu khách hàng có thể có các cột cho một định danh, tên, quốc gia và trạng thái tài khoản. Một cơ sở dữ liệu có thể ghi kết quả truy vấn vào CSV, một bảng tính có thể mở tệp, và một hệ thống khác có thể nhập cùng một hàng mà không cần chia sẻ định dạng sổ làm việc độc quyền.

RFC 4180 tài liệu định dạng CSV phổ biến và loại phương tiện text/csv. Nó mô tả các dấu phân cách bằng dấu phẩy, ranh giới bản ghi CRLF, một tiêu đề tùy chọn, và cách thoát dấu ngoặc kép. Tài liệu này mang tính thông tin hơn là một luật phổ quát cho mọi tệp được gọi là CSV. Nhiều công cụ chấp nhận hoặc sản xuất các biến thể, vì vậy việc trao đổi một tệp CSV vẫn cần có sự đồng thuận về phương ngữ của nó.

Cách cú pháp CSV hoạt động

Một tệp CSV tối thiểu có thể chứa một tiêu đề và ba bản ghi:

id,name,country,active
101,Ada,GB,true
102,Lin,SG,false
103,Sam,CA,true

Mỗi hàng trong ví dụ này có bốn trường. Tiêu đề cung cấp nhãn nhưng không khai báo loại. Một người đọc có thể suy luận rằng id là một số nguyên và active là một boolean, trong khi một người đọc khác có thể giữ lại mọi trường dưới dạng văn bản. Cả hai diễn giải đều khả thi trừ khi hợp đồng dữ liệu quy định một.

Dấu phân cách

Dấu phẩy là dấu phân cách chuẩn, nhưng dấu chấm phẩy, tab và ống dẫn là phổ biến trong các xuất khu vực và nguồn ứng dụng cụ thể. Các địa điểm dùng dấu phẩy thập phân thường sử dụng dấu chấm phẩy để tránh sự không chắc chắn. Các giá trị phân cách bằng tab thường được gọi là TSV, nhưng nhiều hộp thoại nhập nhóm CSV và TSV trong một quy trình “văn bản phân cách”.

Người sản xuất nên nêu rõ dấu phân cách. Đoán từ dòng đầu tiên có thể thất bại khi các giá trị chứa dấu câu hoặc khi một tệp có một cột hoàn toàn không có dấu phân cách. Một quy trình nhận nên cho phép cấu hình phương ngữ rõ ràng và báo cáo các cài đặt đã phát hiện.

Dấu ngoặc kép và cách thoát

Một trường chứa dấu phẩy, một dấu ngoặc kép đôi hoặc một ranh giới bản ghi cần được đặt dấu ngoặc theo các quy tắc RFC 4180 phổ biến. Dấu ngoặc kép đôi bên trong một trường đã được đặt dấu ngoặc sẽ được nhân đôi:

id,name,note
201,"Rivera, Ana","Asked for ""priority"" handling"
202,Chen,"First line
Second line"

Bản ghi thứ hai cho thấy một trường đã được đặt dấu ngoặc có thể chứa một ngắt dòng. Một bộ phân tích cú pháp tách tệp thành các dòng trước khi áp dụng các quy tắc CSV sẽ làm hỏng bản ghi đó. Sử dụng một bộ phân tích cú pháp CSV hiểu cách đặt dấu ngoặc thay vì chia tách chuỗi tổng quát.

Tiêu đề

Một hàng tiêu đề cải thiện khả năng đọc và cho phép người tiêu dùng ánh xạ các cột theo tên thay vì vị trí. Tuy nhiên, cú pháp CSV không thể chứng minh rằng một tiêu đề tồn tại. Một hệ thống nhận cần cấu hình hoặc tham số header loại phương tiện. Tên cột nên độc nhất, ổn định và được tài liệu hóa. Cắt tỉa hoặc thay đổi độ lớn của các tiêu đề mà không có hợp đồng có thể hợp nhất các trường khác biệt.

CSV không định nghĩa điều gì

CSV mô tả các ranh giới trường, không ý nghĩa miền. Nó không cung cấp một cách toàn cầu để khai báo kiểu dữ liệu, khóa chính, mối quan hệ, đơn vị, múi giờ, mã hóa ký tự, hoặc liệu một trường trống có nghĩa là một chuỗi trống, một giá trị không xác định, hoặc một giá trị bị thiếu.

Mô hình W3C cho Dữ liệu và Metadata trên Web giải quyết khoảng trống này bằng cách mô tả cách các tệp bảng có thể được ghép nối với siêu dữ liệu về các cột, kiểu dữ liệu, tiêu đề và mối quan hệ. Các nhóm không cần phải áp dụng mô hình đầy đủ đó, nhưng họ nên cung cấp thông tin tương đương ở đâu đó bền vững.

Những khác biệt về phương ngữ CSV phổ biến

Kích thướcLựa chọn phổ biếnTại sao điều đó quan trọng
Dấu phân cách trườngDấu phẩy, dấu chấm phẩy, tab, ống dẫnMột lựa chọn sai sẽ thay đổi số lượng cột rõ rệt
Ký tự trích dẫnDấu ngoặc kép, dấu nháy đơn, không cóĐiều khiển xem dấu câu và ngắt dòng có nằm trong một trường hay không
Phương pháp thoátDấu ngoặc kép gấp đôi, quy ước dấu gạch chéoSự không khớp làm thay đổi các ký tự trích dẫn nguyên văn
Tiêu đềCó mặt, không có, nhiều dòng mô tảBản ghi đầu tiên có thể bị nhầm với dữ liệu hoặc ngược lại
Mã hóaUTF-8, UTF-8 có BOM, mã hóa kế thừaMột bộ giải mã sai lệch có thể làm hỏng tên và ký hiệu
Kết thúc bản ghiCRLF, LFHầu hết các trình phân tích hiện đại chấp nhận cả hai, nhưng các hệ thống nghiêm ngặt có thể không
Giá trị nullTrường trống, văn bản biểu thị, ký hiệu cụ thể trong hợp đồngChuỗi trống và giá trị thiếu có thể trở nên không thể phân biệt

Tại sao CSV vẫn hữu ích

CSV có hỗ trợ rộng rãi. Các ứng dụng bảng tính, cơ sở dữ liệu, công cụ dòng lệnh, khung dữ liệu, nền tảng phân tích và hệ thống kinh doanh có thể đọc hoặc ghi văn bản có phân cách. Sự tương thích đó làm cho CSV trở thành định dạng chuyển giao đáng tin cậy cho bảng phẳng.

CSV cũng có thể được kiểm tra. Một nhà phát triển có thể mở một tệp nhỏ trong một trình chỉnh sửa văn bản, và một nhà phân tích dữ liệu có thể tải nó vào bảng tính mà không cần cài đặt một trình xem cụ thể cho miền. Bởi vì đại diện có ít chi phí cấu trúc, nó có thể gọn gàng cho các bảng rộng, thường xuyên, đặc biệt là sau khi nén.

Định dạng hoạt động tốt cho xuất khẩu chỉ bổ sung và nhập khẩu theo lô khi mỗi bản ghi theo một lược đồ. Nó kém phù hợp hơn khi một bản ghi chứa các đối tượng lồng nhau, mảng, hoặc một tập hợp trường biến đổi. Những cấu trúc đó phải được làm phẳng thành các cột, phân tách thành các tệp liên quan, hoặc mã hóa bên trong một ô bằng cách sử dụng một quy ước khác.

Các trường hợp sử dụng CSV điển hình

Chuyển giao bảng tính

Các nhóm trao đổi hàng tồn kho, chiến dịch, tài chính, và bảng hoạt động với những người cần sắp xếp, lọc, công thức, hoặc lập biểu đồ trong một giao diện quen thuộc.

Nhập khẩu và xuất khẩu cơ sở dữ liệu

Kết quả truy vấn quan hệ ánh xạ một cách tự nhiên đến các hàng và cột, với điều kiện rằng hợp đồng xuất khẩu bảo tồn các định danh, giá trị null, độ chính xác, và thời gian.

Giai đoạn phân tích

Các tập dữ liệu nhỏ và vừa thường đến dưới dạng CSV trước khi một đường ống xác thực chúng và chuyển đổi chúng thành lưu trữ phân tích có kiểu.

Phân phối dữ liệu công

Các cơ quan và nhóm nghiên cứu xuất bản các tập dữ liệu phẳng dưới dạng CSV vì người nhận có thể xử lý chúng bằng nhiều ngôn ngữ và công cụ máy tính để bàn.

Rủi ro bảo mật CSV

Một tệp CSV là dữ liệu, nhưng phần mềm bảng tính có thể diễn giải một ô bắt đầu bằng các ký tự như dấu bằng là một công thức. Nếu một giá trị không đáng tin cậy trở thành một công thức, việc mở xuất khẩu có thể kích hoạt các hành động được hỗ trợ bởi môi trường bảng tính đó. Vấn đề này thường được gọi là tiêm CSV hoặc công thức.

Hướng dẫn tiêm CSV của OWASP giải thích tại sao các ứng dụng xuất khẩu dữ liệu đầu vào không đáng tin cậy phải tính đến việc giải thích bảng tính. Một nhà sản xuất nên tuân theo hướng dẫn xuất khẩu an toàn hiện tại của bảng tính mục tiêu và không nên giả định rằng việc trích dẫn một trường trung hòa nghĩa công thức. Một người nhận nên mở các tệp chưa biết trong một môi trường được kiểm soát và kiểm tra các ký tự dẫn nghi ngờ trước khi cho phép nội dung hoạt động.

Việc tiếp nhận CSV cũng cần kiểm soát tài nguyên. Đặt giới hạn kích thước tệp, kích thước hàng, số cột, và độ dài trường. Từ chối việc trích dẫn sai định dạng với một vị trí rõ ràng. Giữ tệp gốc để phục vụ cho mục đích kiểm toán, và tránh sửa chữa âm thầm một bản ghi hỏng theo cách làm thay đổi các trường vào cột sai.

Cách nhập CSV một cách đáng tin cậy

  1. Giữ nguyên các byte gốc. Giữ tệp nguồn không thay đổi để vấn đề mã hóa, trích dẫn, và ranh giới hàng có thể được tái tạo.
  2. Đặt hoặc phát hiện phương ngữ. Ưu tiên các cài đặt do nhà sản xuất cung cấp. Nếu cần phát hiện, ghi lại kết quả và cho phép xem xét trước khi tải dữ liệu có giá trị cao.
  3. Giải mã một cách rõ ràng. UTF-8 là một mặc định trao đổi hợp lý, nhưng một dấu hiệu byte-order hoặc siêu dữ liệu hợp đồng có thể chỉ ra một mã hóa khác.
  4. Phân tích với thư viện CSV. Không tách địa chỉ tên trên dấu phẩy hoặc ngắt dòng vì các trường được trích dẫn có thể chứa cả hai.
  5. Xác nhận hình dạng trước. Kiểm tra tiêu đề, tên cột trùng lặp, số trường, các cột cần thiết, và kích thước tối đa trước khi chuyển đổi kiểu.
  6. Chuyển đổi các loại trong một lược đồ. Phân tích ngày, số thập phân, boolean và định danh sử dụng quy tắc địa phương và độ chính xác rõ ràng.
  7. Cách ly các bản ghi không hợp lệ. Báo cáo bản ghi và lý do mà không để một dòng bị lỗi làm ảnh hưởng đến phần còn lại của tập dữ liệu.

CSV So Với Các Định Dạng Khác

CSV được hiểu tốt nhất như một định dạng trao đổi bảng phẳng. JSON thêm các đối tượng lồng nhau, mảng, boolean, số và null. NDJSON giữ một giá trị JSON độc lập mỗi dòng cho các luồng và nhật ký. Parquet lưu trữ các cột có kiểu trong bố cục nhị phân được thiết kế cho các quét phân tích. Một tập tin XLSX có thể giữ lại công thức, kiểu dáng, trang tính và hành vi bảng tính phong phú hơn.

Một quy trình thực tiễn có thể sử dụng nhiều định dạng ở các ranh giới khác nhau. CSV có thể là sự truyền tay cho con người, JSON có thể là phản hồi API, và Parquet có thể là lớp lưu trữ phân tích. Quy trình chuyển đổi có giá trị khi nó phù hợp với người tiêu dùng tiếp theo; nó không nên xóa bỏ các định danh, ngữ nghĩa null, độ chính xác hoặc nguồn gốc.

Cách Tạo Các Tập Tin CSV Sạch

Bắt đầu với một hợp đồng cột ổn định. Sử dụng các tiêu đề duy nhất, phát hành số trường giống nhau trong mỗi bản ghi, trích dẫn các trường theo phương ngữ đã chọn và viết một mã hóa đã được khai báo. Giữ các trường định danh dưới dạng văn bản khi các số 0 ở đầu quan trọng. Sử dụng một cách đại diện ngày không mập mờ được cả hai bên đồng ý, và bao gồm thông tin múi giờ cho các dấu thời gian.

Đừng đặt JSON lồng nhau vào một ô trừ khi hợp đồng rõ ràng nói rằng ô đó chứa JSON và xác định cách thoát của nó. Đối với các mối quan hệ một-nhiều, tách các bản ghi liên quan ra thành một tệp khác với một khóa chung hoặc chọn một định dạng hỗ trợ lồng nhau. Thêm một danh sách khi một lần giao hàng chứa nhiều tệp, lược đồ, checksum hoặc phân vùng.

Kết luận

CSV thành công vì nó cung cấp cho các bảng phẳng một đại diện văn bản nhỏ, được hỗ trợ rộng rãi. Sự đơn giản rõ ràng của nó có thể che giấu những lựa chọn quan trọng về các ký tự phân cách, trích dẫn, tiêu đề, mã hóa, các giá trị null, loại và hành vi bảng tính. Một quy trình CSV đáng tin cậy kết hợp một phương ngữ đã được tài liệu hóa với một lược đồ dữ liệu, phân tích với một thư viện chuyên dụng, xác thực trước khi chuyển đổi, và giữ nguyên đầu vào ban đầu. Với những kiểm soát đó, CSV vẫn là một cầu nối thực tiễn giữa dữ liệu web, cơ sở dữ liệu, công cụ phân tích và người dùng doanh nghiệp.

Sẵn sàng Xây Dựng một Quy Trình Dữ Liệu CSV?

Thu thập kết quả web có cấu trúc với Scrapeless Scraping API và cung cấp các bảng sạch cho các hệ thống và người cần chúng.

Đăng ký hôm nay và nhận $5 tín dụng miễn phíkhông cần thẻ tín dụng.

Đòi $5 Tín Dụng Của Bạn →

Câu Hỏi Thường Gặp

CSV có luôn sử dụng dấu phẩy không?

Không, dấu phẩy là ký tự phân cách chính thức, nhưng các tệp phân cách bằng dấu chấm phẩy, tab hoặc ống dẫn cũng rất phổ biến. Nhà sản xuất và người tiêu dùng nên đồng ý về phương ngữ thay vì chỉ dựa vào tên tệp.

Có thể một trường CSV chứa dấu phẩy hoặc ngắt dòng không?

Có, các quy tắc chung cho phép dấu phẩy và ngắt dòng trong một trường được trích dẫn bằng dấu ngoặc kép. Một dấu ngoặc kép nguyên văn bên trong trường đó được đại diện bởi hai dấu ngoặc kép.

CSV có hỗ trợ các loại dữ liệu không?

CSV tự nó không chứa một hệ thống loại toàn cầu. Ứng dụng nhận hoặc một lược đồ riêng quyết định xem một trường là văn bản, số, ngày, boolean, hay null.

CSV có giống như một tệp Excel không?

Không, CSV lưu trữ một bảng văn bản đơn giản và không giữ lại các tính năng của sổ làm việc như nhiều trang, công thức, kiểu dáng, biểu đồ hoặc loại ô. Các ứng dụng bảng tính có thể mở CSV, nhưng các định dạng là khác nhau.

Tại sao các số 0 ở đầu lại biến mất khỏi các giá trị CSV?

Các số 0 ở đầu thường biến mất vì một bảng tính hoặc trình nhập liệu đã suy ra trường đó là một con số. Nhập các định danh như mã bưu điện và số tài khoản dưới dạng văn bản theo một lược đồ rõ ràng.

Tài liệu tham khảo