Hướng dẫn read csv file in nodejs - đọc tệp csv trong nodejs

Các 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ô. Họ 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 thức để đọc và ghi các tệp CSV.

Hướng dẫn này chỉ cho bạn cách sử dụng mô-đun FS và gói NPM nhanh CSV để đọc và ghi các tệp CSV.fs module and fast-csv NPM package to read and write CSV files.

Thiết lập dự án

Để làm theo cùng với hướng dẫn này, đảm bảo bạn đã cài đặt Node.js trên máy của bạn. 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 không cài đặt Node.js, hãy làm theo hướng dẫn trong hướng dẫn cài đặt này để làm như vậ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 Parse-CSV.

mkdir parse-csv

Điều hướng đến Parse-CSV và tạo một tệp mới. Đặt tên cho nó Parsecsv.js.parse-csv and create a new file. Name it 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 cho 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 lệnh readfile () và readfilesync () từ mô -đun FS 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 các javascript khác thực hiện trong khi readFile () không đồng bộ hoặc không chặn.readFile() and readFileSync() commands from the fs module enable you to read file content in Node.js. The difference between these commands is that readFileSync() is synchronous—it blocks other JavaScript from executing—while readFile() is asynchronous, or non-blocking.

Vì đọc 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 sử dụng lệnh không chặn, readfile (), như được hiển thị bên dưới.readFile(), as shown below.

const fs = require('fs');

fs.readFile('csvdemo.csv', 'utf8', function (err, data) {
/* parse 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ể học cách tự tạo tệp CSV.

Đọc từng dòng

Trong khi ReadFile () hoạt động, nó rất chuyên sâu về 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 một dòng tại một thời điểm bằng cách sử dụng lệnh fs.createleadstream ().readFile() works, it is memory intensive as it reads the whole CSV file all at once. This is a problem, especially when working with large CSV files. An alternative is to read one line at a time using the fs.createReadStream() command.

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);
});

Tại đây, bạn đang chuyển tên tệp CSV cho fs.createleadstream () để tạo một luồng có thể đọc được. 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 vào các khối.fs.createReadStream() to create a readable stream. Streams let you work with large amounts of data by allowing you to access it in chunks.

Khi bạn tạo luồng có thể đọc được, hãy chuyển nó sang phương thức readline.CreateInterface (). Mô -đun Readline 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ó được đọc.readline.createInterface() method. The readline module provides an interface for reading the data one line at a time. You can now push each row to the data array as it’s being read.

Tuy nhiên, lưu ý rằng mã này chỉ đơn giản là chia mỗi 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 dạng thực sự phức tạp hơn so với tên của nó. Phân tích các 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 tình huống, bạn nên sử dụng thư viện CSV.

Sử dụng Fast-CSV

Để phân tích các tệp CSV một cách đáng tin cậy, bạn có thể sử dụng thư viện như Fast-CSV, có sẵn dưới dạng gói NPM. Nó làm cho nó dễ dàng hơn không chỉ đọc các tệp CSV mà còn định dạng chúng.fast-csv, which is available as an npm package. It makes it easier to not only read CSV files but also format them.

Để bắt đầu, khởi tạo NPM và cài đặt Fast-CSV.npm and install fast-csv.

npm init -y
npm i fast-csv

Đọc các tệp CSV bằng cách sử dụ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 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 thức phân tích cú pháp từ nhanh CSV bằng PIPE (). 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 các 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 các tiêu đề.pipe(). Note that you are passing the headers option to csv.parse(). This skips the first row. Set headers to false if the first row of your CSV file does not contain headers.

Vì tệp CSV được đọc một hàng tại một thời điểm, 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 như bạn muốn.

Có nhiều cách để phân tích CSV

Các tệp CSV rất hữu ích để lưu trữ các bộ dữ liệu lớn vì nó dễ phân tích chúng. Trong Node.js, bạn có thể sử dụng các gói FS hoặc NPM tích hợp.

Sử dụng một thư viện như Fast-CSV dễ dàng hơn nhiều 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.csv-parser and papa parser.