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

Node.js

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

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

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

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

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

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

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

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

npm install csv-parser iconv-lite
iconv-liteは日本語対応不要の場合いらないよ!

サンプルコード

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

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

  // 非同期で読み込み
  return new Promise((resolve, reject) => {
    fs.createReadStream("sample.csv").pipe(
     .pipe(iconv.decodeStream('Shift_JIS')) // 日本語対応
      .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 iconv-lite

サンプルコード

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

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

  // 非同期で読み込み
  return new Promise((resolve, reject) => {
    fs.createReadStream("sample.csv").pipe(iconv.decodeStream('Shift_JIS')
.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をコピーしました