【Node.js】CSVファイルを読み込もう!【csv-parser】

Node.js

みなさんこんにちは、現役エンジニアのサメハックです

未経験からWebエンジニアに転職し、
正社員として5年働いたのちフリーランスとして独立しました。

Node.jsの解説シリーズです。

今回はcsv-parserを使ってCSVファイルを読み込む方法について学んでいきましょう!

駆け出しエンジニアや未経験の方、
また新入社員を指導する先輩社員にとっても
わかりやすいように解説していきます!

この記事を読むと・・・
  • Node.jsでCSVが読み込める
  • csv-parserの使い方がわかる
本記事ではTypeScriptで記述するよ!

ヘッダーを自前で用意する

ライブラリをインストール

npm install csv-parser

サンプルコード

import * as fs from "fs";
import * as csv from "csv-parser";

const getCsv = async () => {
  // 読み込んだCSVを代入する
  const csvResults = [];
  // 自前のヘッダー設定
  const HEADERS = ["PARAM0", "PARAM1", "PARAM2", "PARAM3"];

  // 非同期で読み込み
  return new Promise((resolve, reject) => {
    fs.createReadStream("sample.csv").pipe(
      csv({
        // 自作したヘッダーを設定
        headers: HEADERS,
        // 値を一部変換
        mapValues: ({ header, index, value }) => {
          // スペースとダブルクオーテーションを削除
          value.replace(/\s+/g, "").replace(/"/g, "");
        },
      })
        .on("data", (data) => {
          // データ読み込み処理
          csvResults.push(data);
        })
        .on("end", () => {
          // 全データの読み込みが完了
          resolve(csvResults);
        })
        .on("error", (error) => {
          // エラー発生時の処理
          reject(error);
        })
    );
  });
};

// awaitをつけるのを忘れない!
const csvData = await getCsv();

CSVファイルの1行目をヘッダーとする

ライブラリをインストール

npm install csv-parser

サンプルコード

import * as fs from "fs";
import * as csv from "csv-parser";

const getCsv = async () => {
  // 読み込んだCSVを代入する
  const csvResults = [];

  // 非同期で読み込み
  return new Promise((resolve, reject) => {
    fs.createReadStream("sample.csv").pipe(
      csv({
        // 自作したヘッダーを設定
        headers: HEADERS,
        // 値を一部変換
        mapValues: ({ header, index, value }) => {
          // スペースとダブルクオーテーションを削除
          value.replace(/\s+/g, "").replace(/"/g, "");
        },
      })
        .on("data", (data) => {
          /*    空行をスキップする処理を実装    */
          // カラムがnullのものをカウント
          let blankCounter = 0;

          // key名を取得
          const keys = Object.keys(data); 

          // 各カラムの値がnullかどうかを確認
          for (let key of keys) {
            // データがnullならカウンターを+1
            if(!data[key]) blankCounter++;
          }

          // 全てのカラムがnullの場合、空行であるためスキップ
          if( blankCounter == keys.length) return

          // データを追加
          csvResults.push(data);
        })
        .on("end", () => {
          // 全データの読み込みが完了
          resolve(csvResults);
        })
        .on("error", (error) => {
          // エラー発生時の処理
          reject(error);
        })
    );
  });
};

// awaitをつけるのを忘れない!
const csvData = await getCsv();

まとめ

  • csv-parserを使うとCSVファイルの読み込みができる
  • ヘッダーを自作するか、CSVファイル上で管理するかによって処理が変わる

満足いただけたら、1クリックなのでSNSフォローしてもらえると嬉しいです🦈

タイトルとURLをコピーしました