Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9042

Node.jsでcsvファイルを読み書きする

$
0
0

はじめに

node.jsでcsvを読み書きしたい時があったので,備忘録としてまとめようと思い,この記事を書きました。
streamを使ったやり方など,色々と方法があったのですが,今回は fs.readFileSyncfs.writeFileSyncを用いた方法でやってみました。

大まかな流れ

  1. 必要なパッケージのダウンロード
  2. 読み込むcsvファイルの作成
  3. 実行ファイルの作成
  4. 実行

必要なパッケージのダウンロード

今回は, csvというモジュールを使用しますので,以下コマンドを使用してダウンロードします。

$npm install--save csv
  • --save : package.jsonのdependenciesに追加される

読み込むcsvファイルの作成

先頭の行に,カラム名を入れておきます。

input.csv
name,age,gender
taro,30,man
jiro,28,man
hanako,20,woman 

実行ファイルの作成

実行ファイルの完成形

input.csvというcsvファイルを読み込み,行を追加して output.csvという名前で出力するコードになっています。

sample.js
// file system モジュールを読み込むconstfs=require('fs');// csv モジュールの内,必要な機能を読み込むconstparse=require('csv-parse/lib/sync');conststringify=require('csv-stringify/lib/sync');// csvファイルを読み込むconstinputData=fs.readFileSync('./input.csv',{encoding:'utf8'});// 先頭行をcolumnとして扱い,csvデータをparseconstparsedData=parse(inputData,{columns:true});// 行を追加parsedData.push({'name':'saburo','age':'25','gender':'man'});// オブジェクトのプロパティを先頭行に記述し,csvデータに変換constoutputData=stringify(parsedData,{header:true});// csvファイルを出力fs.writeFileSync('output.csv',outputData,{encoding:'utf8'});

以下で詳細に説明します。

モジュールの読み込み

sample.js(一部)
// file system モジュールを読み込むconstfs=require('fs');// csv モジュールの内,必要な機能を読み込むconstparse=require('csv-parse/lib/sync');conststringify=require('csv-stringify/lib/sync');

実装に必要なモジュールを読み込みます。(csv-parse と csv-stringfy については,後ほど詳しく説明します。)

csvファイルを読み込む

sample.js(一部)
// csvファイルを読み込むconstinputData=fs.readFileSync('./input.csv',{encoding:'utf8'});

fsモジュールを用いて, input.csvを読み込みます。
今回は,オプションで文字コードを UTF-8と指定しています。

csvファイルをオブジェクトに変換

sample.js(一部)
// 先頭行をcolumnとして扱い,csvデータをparseconstparsedData=parse(inputData,{columns:true});

fs.readFileSyncでcsvファイルを読み込むと,以下のように単なる文字列として保存されます。

inputDataの中身
name,age,gender
taro,30,man
jiro,28,man
hanako,20,woman

これを,javascriptで操作しやすくするためにオブジェクトの形式に変更するのが, csv-parseです。
columns : trueというオプションをつけることによって,csvファイルの先頭行を,オブジェクト変換後のプロパティとして扱います。

parsedDataの中身
[
  { name: 'taro', age: '30', gender: 'man' },
  { name: 'jiro', age: '28', gender: 'man' },
  { name: 'hanako', age: '20', gender: 'woman' }
]

末尾に行を追加

sample.js(一部)
// 行を追加parsedData.push({'name':'saburo','age':'25','gender':'man'});

オブジェクトをcsvデータに変換

sample.js(一部)
// オブジェクトのプロパティを先頭行に記述し,csvデータに変換constoutputData=stringify(parsedData,{header:true});

csv-stringifyは, csv-parseとは逆に,javascriptのオブジェクトをcsvファイルとして出力するための文字列に変換するモジュールです。
変換されたデータは,以下のような中身になっています。

outputDataの中身
name,age,gender
taro,30,man
jiro,28,man
hanako,20,woman
saburo,25,man

csvファイルを出力

sample.js(一部)
// csvファイルを出力fs.writeFileSync('output.csv',outputData,{encoding:'utf8'});

fsモジュールを用いて, output.csvという名前でcsvファイルを出力します。

実行

$node sample.js
output.csv
name,age,gender
taro,30,man
jiro,28,man
hanako,20,woman
saburo,25,man

参考


Viewing all articles
Browse latest Browse all 9042

Trending Articles