node.jsでCSVファイルを読み込むには

node-csvを使って、CSVファイルを読み込む方法です。

node-csvでCSVファイルを読み込む

まずはインストール。

npm install csv --save

sample.csvを読み込み、コンソールに出力します。

const fs = require('fs');
const parse = require('csv').parse;

const parser = parse((err, data) => console.log(data));

fs.createReadStream(__dirname + '/sample.csv').pipe(parser);

CSVファイルの文字コードがUTF-8のときは正しく表示されました。

しかし、Shift_JISのファイルはときは文字化けしました。

iconv-liteで文字コードを変換する

Shift_JISのファイルを読み込むことができるように、iconv-liteをインストールします。

npm install csv --save

iconv-liteを使って、Shift_JISのCSVファイルを読み込みます。

const fs = require('fs');
const parse = require('csv').parse;
const iconv = require('iconv-lite');

const parser = parse((err, data) => console.log(data));

fs.createReadStream(__dirname + '/sample.csv')
    .pipe(iconv.decodeStream('shift_jis'))
    .pipe(parser);

正しく読み込めました。

CSVファイルのデータを文字列の配列として取得する

読み込んだCSVファイルのデータは、parser中のdataに入っています。
dataが各行の配列になっており、各行はセルの値の文字列の配列になっています。

const fs = require('fs');
const csv = require('csv');

const parser = csv.parse((err, data) => {
    console.log('CSVファイルの行数=' + data.length);
    data.forEach((element, index, array) => console.log(index + '行目=' + element));
});

fs.createReadStream(__dirname + '/sample.csv').pipe(parser);

CSVファイルのデータをオブジェクトの配列として取得する

オプションに{columns:true}をつけると、1行目をプロパティ名にしたオブジェクトの配列が返ります。

TypeScriptのサンプルコード。

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

fs.readFile(__dirname + "/sample.csv", (err, data) => {
    // オプションに{columns:true}をつけると、1行目をプロパティ名にしたオブジェクトの配列が返る
    csv.parse(data, { columns: true }, (err, output: Array<Object>) => {
        output.forEach((value) => { console.log(value); });
    });
});

samle.csv

abc,def,ghi
123,456,789
ABC,DEF,GHI

実行結果

{ abc: '123', def: '456', ghi: '789' }
{ abc: 'ABC', def: 'DEF', ghi: 'GHI' }

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です