【例あり】複数のcsvやtxtファイルを結合する方法を紹介!

【例あり】複数のcsvやtxtファイルを結合する方法を紹介!

複数のcsv・txtファイルを結合したい。そういう場面はないでしょうか?2~3このファイルであれば手作業でも結合できますが、ファイルが大量にそうはいきません。今回はかんたんに複数のcsv・txtファイルを結合する方法を紹介していきます。


目次[非表示]

  1. 複数のcsvやtxtファイルを結合したい
  2. 複数のcsvやtxtファイルを結合する方法

複数のcsvやtxtファイルを結合したい

ログデータやトランザクションデータなどのデータを結合して1つのファイルにしたいというときが訪れることがあります。

結合するファイルが数ファイルであれば手作業でコピーしても大した苦労はしないでしょう。

しかし、結合対象のファイルが何十何百と合った場合だとどうでしょうか?結合するファイルが膨大だと手作業では非常に効率が悪く、自動化の必要性も出てきます。

そこで今回は、csv・txtファイルを一括で結合する方法を解説していきます。

複数のcsvやtxtファイルを結合する方法

複数のcsv・txtを結合する方法はいくつかありますので、それぞれ順番に解説していきます。

バッチファイルを使う

バッチファイルとは、コマンドプロンプトで実行できるコマンドを記述したファイルのことです。バッチファイルに複数のコマンドを書きまとめておくことで、処理の自動化が行えるのです。

 

バッチファイルなんて聞いたことが無い・使ったことがないという方が多いかもしれませんが、コピーペーストでできますので、知識が全くなくても大丈夫です。

まずはcsvの結合を解説していきます。

空のフォルダを作成
まずはどこでも良いので空のフォルダを作ってください。
その中に結合したいcsvファイルをコピーして保存
作成したら、その中に結合したいcsvファイルをコピーして保存します。
同じフォルダに「marge.bat」というファイルを作成
同じフォルダに「marge.bat」というファイルを作成してください。

作成したmarge.batをテキストエディタで開き、以下のテキストを書き込んで保存します。

copy *.csv __result.csv

保存したらテキストエディタを閉じてもらって問題ありません。

merge.batをダブルクリックして実行
次に、merge.batをダブルクリックして実行してください。
同じフォルダに__result.csvが生成
実行しても何かウィンドウが表示されるわけではありませんが、しばらくすると同じフォルダに__result.csvが生成されているはずです。

この__result.csvが、同一フォルダ内にある全てのcsvファイルが結合されたファイルです。試しにテキストエディタやエクセルなどで開いてみてください。

しっかり、1つのファイルにまとめることができているはずです。

txtファイルの場合は?

テキストファイルの場合は、merge.batの中身を以下のものに書き換えてください。

copy *.txt __result.txt

このコマンドを保存したバッチファイルを実行すると、同一フォルダ内のtxtファイルが全て結合された__result.txtが生成されます。

コマンドプロンプトで結合する

コマンドプロンプトから複数ファイルを結合することも可能です。

タスクバーの検索ボックスでコマンドプロンプトを検索
まずはタスクバーの検索ボックスでコマンドプロンプトを検索、起動しましょう。

起動したら、コマンドプロンプト上で開いているフォルダ(カレントディレクトリ)を変更する必要があります。

結合したいファイルがあるフォルダをエクスプローラで開く
結合したいファイルがあるフォルダをエクスプローラで開いておいてください。
フォルダのパンくずリストをクリックして、フォルダパスをコピー
次に、フォルダのパンくずリストをクリックして、フォルダパスをコピーします。
コピーしたらコマンドプロンプトで「cd」を入力し、先ほどコピーしたフォルダパスを貼り付け
コピーしたらコマンドプロンプトで「cd」を入力し、先ほどコピーしたフォルダパスを貼り付けてエンターキーを押します。

この際貼り付けコマンドは「Ctrl+V」ではなく右クリックですので、間違えないようにしましょう。

コマンド入力欄のテキストが、先ほど入力したフォルダパスに変わる
無事開いているフォルダ(カレントディレクトリ)を変更できたら、コマンド入力欄のテキストが、先ほど入力したフォルダパスに変わっています。

これで、csvファイルがあるフォルダにコマンドプロンプトでアクセスできている状態です。

この状態でcsvファイルを結合それ以下のコマンドを打ち込み、エンターキーを押してみてください。

copy *.csv __result.csv
結合に成功するとこのようなメッセージが表示
結合に成功するとこのようなメッセージが表示されますので、エクスプローラの方でファイルを確認してみてください。

コマンドプロンプトを使う場合はこの方法で結合できます。ですが、予めコマンドを入力しておいたバッチファイルを使うほうが簡単ですので、覚えておくと良いでしょう。

Windows Power Shellで結合する

Windows10ではコマンドプロンプトではなくWindows Power Shellが標準コマンドラインインターフェイスとなっています。

Windows Power Shellはタスクバーからではなく、エクスプローラーから起動することができるます。

その関係で、Windows Power Shellを起動する際に開いていたフォルダがカレントディレクトリとなり、cdコマンドを使ってフォルダを移動する必要がありません。

コマンド操作初心者ならコマンドプロンプトよりWindows Power Shellのほうが扱いやすいでしょう。

PoweShellの起動はエクスプローラー左上の「ファイル」から行えます。

開いていたフォルダがカレントディレクトリになっているので、cdコマンドを打ち込む必要はありません。すぐにcopyコマンドで結合可能です。

copy *.csv __result.csv

コマンドプロンプトを使用した時と同じように、上記コマンドを実行するだけでフォルダ内のcsvファイルが全て結合されます。

txtファイルを全て結合したい場合は以下のコマンドを使ってください。

copy *.txt __result.txt

csvファイルのヘッダーを統一する方法

通常の結合方法をとると、ヘッダー行の有無に関わらず全ての行が結合されます。

txtファイルであれば全く問題ない動作ですが、csvの場合はヘッダー行は1ファイルだけでいいという事が多いでしょう。

その場合は以下のコマンドをmerge.bat(バッチファイル)にコピーペーストして保存してください。

@echo off
setlocal enabledelayedexpansion

set /a counter=0

for /f %%i in ('dir /b *.csv') do (

    echo %%i
    if !counter!==0 (
        set /p _head=<%%i
        echo !_head!>>result.csv
    )
    set /a counter=!counter!+1

    for /f "tokens=* skip=1" %%b in (%%i) do (
        echo %%b>>result.csv
    )
)

かなり複雑なコマンドで、プログラミング経験が必要となる記述ですので、コマンドの解説は省略します。

コマンドを保存したら、merge.batを実行してみてください。ヘッダー行が1行目だけになり、以降は全てヘッダー行以外のデータになっています。

csv・txtファイルを結合する際のポイント

csvやtxtファイルを結合する際にいくつか押さえておきたいポイントがあります。どんなファイルでもキレイに結合できるわけではないので、しっかり仕組みを覚えておきましょう。

結合順序はアルファベット順

今回紹介した方法は非常に手軽に複数ファイルを結合できますが、結合する順序を選ぶことはできません。

ただし、結合順序は完全にランダムというわけではなく、アルファベット順で若いファイル名から順番に連結されていきます。

例えば「s1.csv・a2.csv・s3.csv」の3つがあった場合は、

  1. a2.csv
  2. s1.csv
  3. s3.csv

の順番で連結されていきます。

「なぜ番号順じゃないのか?」と思うかもしれませんが、ファイル名の先頭文字から順番に並び替えられるため、sよりも若いaから始まるファイルが最初の結合対象となっているのです。

結合順序はコントロールしたい場合は、ファイル名に使用しているアルファベットや数字を意識するようにしましょう。

エクセル形式(.xls・.xlsxなど)は結合不可

csvが出来るから、エクセルファイル(.xls・.xlsxなど)も出来ると思うかもしれません。

ですが、エクセルで使われている.xls・.xlsx形式のファイルは、プログラムでの読み込みに特化したバイナリファイル(人間が読めないファイル)であるため、この方法では正しく結合できません。

今回はcsv・txt形式のファイルの結合について解説しているので、エクセル形式のファイルの結合については割愛させていただきます。

tsvファイルも同じ手順で結合可能

csvとは違い、タブでセル分けされるtsvファイルも同じ手順で結合することが可能です。

バッチファイルやコマンドプロンプト・Power Shellを使う場合は以下のコマンドを使用しましょう。

copy *.tsv __result.tsv

ファイルの結合に関してだけで言えば、結合対象ファイルの拡張子が変わっただけですので、やり方自体は何も変わらないのです。tsvファイルを扱うことがある場合は覚えておいてください。


関連記事