Cách đọc tệp CSV với Node.js
Tệp CSV là một định dạng lưu trữ dữ liệu thuận tiện và bạn có thể sử dụng chúng trong các dự án Node.js của mình để xử lý mọi thứ từ cấu hình đến dữ liệu thô. Chúng có thể đơn giản hóa việc chia sẻ thông tin giữa hai ứng dụng, ngay cả khi chúng được viết bằng các ngôn ngữ khác nhau.
Trong Node.js, bạn có thể sử dụng một số phương pháp để đọc và ghi tệp CSV.
Hướng dẫn này chỉ cho bạn cách sử dụng fs mô-đun và nhanh-csv Gói NPM để đọc và ghi tệp CSV.
Mục Lục
Thiết lập dự án
Để làm theo hướng dẫn này, hãy đảm bảo bạn đã cài đặt Node.js trên máy của mình. Chạy lệnh này để kiểm tra:
node -v
Nó sẽ trả về một số phiên bản. Nếu bạn chưa cài đặt Node.js, hãy làm theo hướng dẫn trong hướng dẫn cài đặt này.
Trong thư mục ưa thích của bạn, hãy tạo một thư mục mới có tên là parse-csv.
mkdir parse-csv
Hướng đến phân tích cú pháp-csv và tạo một tệp mới. Đặt tên là parseCSV.js.
cd parse-csv
touch parseCSV.js
Bây giờ bạn có thể bắt đầu làm việc với CSV.
Sử dụng Mô-đun fs
Mô-đun fs (viết tắt của hệ thống tệp) chứa một số lệnh để tương tác với hệ thống tệp trong Node.js.
Đọc toàn bộ tệp cùng một lúc
Các Đọc tài liệu() và readFileSync () lệnh từ fs mô-đun cho phép bạn đọc nội dung tệp trong Node.js. Sự khác biệt giữa các lệnh này là readFileSync () là đồng bộ — nó chặn JavaScript khác thực thi — trong khi Đọc tài liệu() là không đồng bộ hoặc không chặn.
Vì việc đọc tệp CSV có thể mất một chút thời gian, đặc biệt là đối với các tệp lớn, nên thường tốt hơn nếu sử dụng lệnh không chặn, Đọc tài liệu()như hình dưới đây.
const fs = require('fs');fs.readFile('csvdemo.csv', 'utf8', function (err, data) {
});
Nếu bạn không có tệp CSV mẫu, bạn có thể tạo một tệp từ mockaroo. Bạn cũng có thể tìm hiểu cách tự tạo tệp CSV.
Đọc từng dòng
Trong khi Đọc tài liệu() hoạt động, nó tốn nhiều bộ nhớ vì nó đọc toàn bộ tệp CSV cùng một lúc. Đây là một vấn đề, đặc biệt là khi làm việc với các tệp CSV lớn. Một giải pháp thay thế là đọc từng dòng một bằng cách sử dụng fs.createReadStream () yêu cầu.
const fs = require("fs");
const readline = require("readline");
const stream = fs.createReadStream("./csvdemo.csv");
const rl = readline.createInterface({ input: stream });
let data = [];rl.on("line", (row) => {
data.push(row.split(","));
});
rl.on("close", () => {
console.log(data);
});
Ở đây, bạn đang chuyển tên tệp CSV tới fs.createReadStream () để tạo một luồng có thể đọc được. Luồng cho phép bạn làm việc với một lượng lớn dữ liệu bằng cách cho phép bạn truy cập nó theo từng phần.
Sau khi bạn tạo luồng có thể đọc được, hãy chuyển luồng đó tới readline.createInterface () phương pháp. Các đường đọc mô-đun cung cấp một giao diện để đọc dữ liệu một dòng tại một thời điểm. Bây giờ bạn có thể đẩy từng hàng vào mảng dữ liệu khi nó đang được đọc.
Tuy nhiên, lưu ý rằng mã này chỉ đơn giản là tách từng hàng trên dấu phẩy. Mặc dù điều này sẽ hoạt động với tệp CSV cơ bản nhất, nhưng định dạng này thực sự phức tạp hơn so với tên gọi của nó. Phân tích cú pháp tệp CSV theo cách thủ công không phải là một cách tiếp cận mạnh mẽ, đặc biệt nếu bạn không tự kiểm soát dữ liệu. Đối với hầu hết các trường hợp, bạn nên sử dụng thư viện CSV.
Sử dụng fast-csv
Để phân tích cú pháp các tệp CSV một cách đáng tin cậy, bạn có thể sử dụng một thư viện như nhanh-csv, có sẵn dưới dạng gói npm. Nó giúp bạn không chỉ đọc tệp CSV mà còn định dạng chúng dễ dàng hơn.
Để bắt đầu, hãy khởi tạo npm và cài đặt nhanh-csv.
npm init -y
npm i fast-csv
Đọc tệp CSV bằng fast-csv như sau.
const fs = require('fs')
const csv = require('fast-csv');
const data = []fs.createReadStream('./csvdemo.csv')
.pipe(csv.parse({ headers: true }))
.on('error', error => console.error(error))
.on('data', row => data.push(row))
.on('end', () => console.log(data));
Trong đoạn mã trên, hãy bắt đầu bằng cách tạo một luồng có thể đọc được từ tệp CSV, sau đó kết nối nó với phương pháp phân tích cú pháp từ CSV nhanh bằng cách sử dụng đường ống(). Lưu ý rằng bạn đang chuyển tùy chọn tiêu đề cho csv.parse (). Điều này bỏ qua hàng đầu tiên. Đặt tiêu đề thành SAI nếu hàng đầu tiên của tệp CSV của bạn không chứa tiêu đề.
Khi tệp CSV được đọc từng hàng một, bạn đang đẩy từng hàng vào mảng dữ liệu. Sau khi toàn bộ tệp được đọc, bạn có thể thao tác nội dung của mảng dữ liệu theo ý muốn.
Có nhiều hơn một cách để phân tích cú pháp CSV
Tệp CSV hữu ích để lưu trữ các tập dữ liệu lớn vì dễ dàng phân tích cú pháp chúng. Trong Node.js, bạn có thể sử dụng mô-đun fs tích hợp sẵn hoặc các gói NPM.
Sử dụng một thư viện như fast-csv dễ dàng và mạnh mẽ hơn nhiều so với việc viết mã phân tích cú pháp của riêng bạn theo cách thủ công. Một số gói khác để phân tích cú pháp CSV là csv-parser và papa parser.
Đọc tiếp
Giới thiệu về tác giả