Hướng dẫn nodejs read csv file into array - nodejs đọc tệp csv vào mảng

Sử dụng một thư viện, CSV có rất nhiều gotchas. Tôi đã đến để thưởng thức gói csv. Nó nằm ở đây: https://www.npmjs.com/package/csv. Dưới đây là một ví dụ rất nhanh sử dụng API Async.

const fs = require('fs')
var parse = require('csv-parse')
fs.readFile(inputPath, function (err, fileData) {
  parse(fileData, {columns: false, trim: true}, function(err, rows) {
    // Your CSV data is in an array of arrys passed to this callback as rows.
  })
})

Vì tệp của bạn không có nhiều giá trị mỗi hàng và không chứa trình phân cách nào ngoài Newline, nên nó chỉ là CSV tầm thường. Có lẽ String.prototype.split() là dành cho bạn?

const fs = require('fs')
fs.readFile(inputPath, 'utf8', function (err, data) {
  var dataArray = data.split(/\r?\n/);  //Be careful if you are in a \r\n world...
  // Your array contains ['ID', 'D11', ... ]
})

Chào mừng bạn đến với một hướng dẫn nhanh về cách đọc các tệp CSV trong NodeJS. Cần đọc một số dữ liệu từ tệp CSV trong nút? Chà, chúng tôi thực sự cần phải sử dụng bất kỳ mô-đun bên thứ ba nào.

Các cách phổ biến để đọc các tệp CSV trong NodeJS là:

  1. Đọc toàn bộ tệp CSV thành một chuỗi, sau đó chia nó thành một mảng.
    • var data = require("fs").readFileSync("FILE.CSV", "utf8")
    • data = data.split("\r\n")
    • for (let i of data) { data[i] = data[i].split(",") }
  2. Đọc từng dòng tệp CSV vào một mảng.
    • const fs = require('fs')
      fs.readFile(inputPath, 'utf8', function (err, data) {
        var dataArray = data.split(/\r?\n/);  //Be careful if you are in a \r\n world...
        // Your array contains ['ID', 'D11', ... ]
      })
      
      0
    • const fs = require('fs')
      fs.readFile(inputPath, 'utf8', function (err, data) {
        var dataArray = data.split(/\r?\n/);  //Be careful if you are in a \r\n world...
        // Your array contains ['ID', 'D11', ... ]
      })
      
      1
    • const fs = require('fs')
      fs.readFile(inputPath, 'utf8', function (err, data) {
        var dataArray = data.split(/\r?\n/);  //Be careful if you are in a \r\n world...
        // Your array contains ['ID', 'D11', ... ]
      })
      
      2
    • const fs = require('fs')
      fs.readFile(inputPath, 'utf8', function (err, data) {
        var dataArray = data.split(/\r?\n/);  //Be careful if you are in a \r\n world...
        // Your array contains ['ID', 'D11', ... ]
      })
      
      3

Điều đó bao gồm những điều cơ bản, nhưng đọc tiếp để có thêm ví dụ!

Tôi đã bao gồm một tệp zip với tất cả mã nguồn khi bắt đầu hướng dẫn này, vì vậy bạn không phải sao chép mọi thứ, hoặc nếu bạn chỉ muốn đi thẳng vào.

Slide nhanh

Hướng dẫn nodejs read csv file into array - nodejs đọc tệp csv vào mảng

MỤC LỤC

Tải xuống & ghi chú

Hướng dẫn nodejs read csv file into array - nodejs đọc tệp csv vào mảng

Thứ nhất, đây là liên kết tải xuống đến mã ví dụ như đã hứa.

Ghi chú nhanh

Nếu bạn phát hiện ra một lỗi, hãy bình luận bên dưới. Tôi cũng cố gắng trả lời các câu hỏi ngắn, nhưng đó là một người so với toàn bộ thế giới, nếu bạn cần câu trả lời khẩn cấp, vui lòng kiểm tra danh sách các trang web của tôi để nhận trợ giúp lập trình.

Mã hóa ví dụ Tải xuống

Nhấn vào đây để tải xuống tất cả các mã nguồn ví dụ, tôi đã phát hành nó theo giấy phép MIT, vì vậy hãy thoải mái xây dựng trên đó hoặc sử dụng nó trong dự án của riêng bạn.

Được rồi, bây giờ chúng ta hãy vào các ví dụ về cách đọc các tệp CSV trong NodeJS.

1) Đọc CSV vào mảng

1-read-array.js

// (A) FILE SYSTEM MODULE
const fs = require("fs");
 
// (B) READ CSV INTO STRING
var data = fs.readFileSync("dummyA.csv", "utf8");
 
// (C) STRING TO ARRAY
data = data.split("\r\n"); // SPLIT ROWS
for (let i in data) { // SPLIT COLUMNS
  data[i] = data[i].split(",");
}
console.log(data);

Đây là ví dụ đầy đủ của người Viking về đoạn trích trên trong phần giới thiệu. Đối với những người mới bắt đầu, những người không bắt được quy trình:

  • (A & B) Chúng tôi đọc toàn bộ tệp CSV dưới dạng chuỗi thành
    const fs = require('fs')
    fs.readFile(inputPath, 'utf8', function (err, data) {
      var dataArray = data.split(/\r?\n/);  //Be careful if you are in a \r\n world...
      // Your array contains ['ID', 'D11', ... ]
    })
    
    4.
    We read the entire CSV file as a string into
    const fs = require('fs')
    fs.readFile(inputPath, 'utf8', function (err, data) {
      var dataArray = data.split(/\r?\n/);  //Be careful if you are in a \r\n world...
      // Your array contains ['ID', 'D11', ... ]
    })
    
    4.
  • (C) Một phân chia hai lớp của người Viking trên chuỗi để biến nó thành một mảng lồng nhau. A “two-layer split” on the string to turn it into a nested array.
    • data = data.split("\r\n") sẽ tách các hàng, biến
      const fs = require('fs')
      fs.readFile(inputPath, 'utf8', function (err, data) {
        var dataArray = data.split(/\r?\n/);  //Be careful if you are in a \r\n world...
        // Your array contains ['ID', 'D11', ... ]
      })
      
      6 thành một mảng.
    • const fs = require('fs')
      fs.readFile(inputPath, 'utf8', function (err, data) {
        var dataArray = data.split(/\r?\n/);  //Be careful if you are in a \r\n world...
        // Your array contains ['ID', 'D11', ... ]
      })
      
      7 sẽ tách biệt các cột riêng lẻ của mỗi hàng.

2) Đọc CSV vào mảng (từng dòng)

2-stream-array

// (A) FILE SYSTEM + READ LINE MODULES
const fs = require("fs"),
      rl = require("readline");
 
// (B) FILE STREAM
const reader = rl.createInterface({
  input: fs.createReadStream("dummyA.csv")
});

// (C) READ LINE-BY-LINE INTO ARRAY
var arr = [];
reader.on("line", (row) => {
  arr.push(row.split(","));
});

// (D) DONE - FULL ARRAY
reader.on("close", () => {
  console.log(arr);
});

Ví dụ trước đây hoạt động, nhưng nó có một lỗ hổng khá quan trọng-không phải là một ý tưởng tốt để đọc toàn bộ tệp CSV lớn, nó có thể sẽ gặp phải các vấn đề ngoài bộ nhớ. Ví dụ thứ hai này là một cách vòng xoay vòng tròn của người Viking để đọc từng hàng của tệp CSV thay thế.

3) Đọc CSV bằng trình phân tích cú pháp CSV

3-parser.js

// (A) CSV PARSER MODULE
// npm install csv-parser
// https://www.npmjs.com/package/csv-parser
const fs = require("fs"),
      csv = require("csv-parser");
 
// (B) READ CSV FILE
var results = [];
fs.createReadStream("dummyB.csv")
.pipe(csv())
.on("data", (data) => results.push(data))
.on("end", () => {
  console.log(results);
});

Cuối cùng, có rất nhiều trình phân tích cú pháp CSV của CSV và người đọc CSV CSV. Chúng tôi thực sự cần phải sử dụng chúng, nhưng chúng làm phần nào làm cho mọi thứ dễ dàng hơn.

Liên kết & Tài liệu tham khảo

  • Cách đọc tệp trong NodeJS - Code Boxx
  • Cách viết các tệp CSV trong NodeJS - Code Boxx
  • CSV Parser - NPMJS

Bảng gian lận infographic

Hướng dẫn nodejs read csv file into array - nodejs đọc tệp csv vào mảng
Đọc các tệp CSV trong nodejs (bấm để phóng to)

KẾT THÚC

Cảm ơn bạn đã đọc, và chúng tôi đã đi đến cùng. Tôi hy vọng rằng nó đã giúp bạn hiểu rõ hơn và nếu bạn muốn chia sẻ bất cứ điều gì với hướng dẫn này, xin vui lòng bình luận bên dưới. Chúc may mắn và mã hóa hạnh phúc!