この記事ではPythonとそのライブラリであるPandas・Chardetを使用して
指定フォルダ内にあるすべてのCSVファイルをひとつに結合する方法
をご紹介します。
必要なツール・ライブラリのインストール方法やソースコード、具体的な使用方法を画像つきで丁寧に解説しています。
今回ご紹介するソースコードを使用すれば、「指定したフォルダ内に入れてあるCSVファイル」は、それらのディレクトリ構造に関係なく、すべてひとつのファイルに結合することが可能です。
ぜひご活用いただければ何よりです!
【事前準備】必要ソフト・ライブラリのインストール
本章では以下のインストール方法をそれぞれ解説します。
- Python
- pip(パッケージ管理ツール)
- Pandas(ライブラリ)
- Chardet(ライブラリ)
もし上記の中で、インストールが済んでいないものがあれば、以下よりご紹介する方法でインストールを完了しましょう。
① Pythonのインストール
インストーラをダブルクリックします。
すると、インストーラが起動するので「Add python.exe to PATH」にチェックを入れます。
インストールが完了するまで待機します。
以下のような画面になったらインストールは完了です。
Closeボタンで閉じてしまってOKです!
Windows PowerShellやターミナルで以下のコマンドを実行します。
Pythonのバージョンが表示されれば、無事にインストールは完了しています。
python --version
② pipのインストール
pip --version
この節では、Pythonのインストールが済んでいるけどpipが使用できないという方向けのインストール方法をご紹介します。
以下のリンクからget-pip.pyを取得します。
https://bootstrap.pypa.io/get-pip.py
リンクをクリックしてもページが開かれるだけの場合は、以下の手順でファイルをダウンロードすることが可能です。
1.リンクを右クリック
2.「名前を付けてリンク先を保存」をクリック
get-pip.pyを配置したディレクトリ上で以下のコマンドを実行します。
python get-pip.py
例えば、ファイルを「デスクトップ」に保存したなら、ターミナル上で「デスクトップ」へ移動し、上記のコマンドを実行します。
デスクトップへ移動する(Windowsの場合)
cd C:\Users\ユーザー名フォルダ\OneDrive\デスクトップ
以下のコマンドを実行してpipがインストールされているか確認します。
pip --version
③ Pandas・Chardetのインストール
ライブラリはpipを使用することで簡単にインストール可能です。
以下のコマンドを実行しましょう。
pip install pandas
pip install chardet
以上で必要なソフトやライブラリのインストールは完了です!
【ソースコード】複数のCSVファイルをひとつにまとめる
早速ですが、以下が複数のCSVファイルをひとつのCSVファイルにまとめるソースコードです。
import os
import pandas
import chardet
from datetime import datetime
def detect_encoding(file_path):
with open(file_path, 'rb') as file:
result = chardet.detect(file.read())
return result['encoding']
def merge_csv_files(root_folder, output_folder):
# 出力フォルダが存在しない場合は新規作成
if not os.path.exists(output_folder):
os.makedirs(output_folder)
print(f"'{output_folder}'ディレクトリを新規作成しました。")
all_files = []
# 再帰的にフォルダを探索し、CSVファイルのリストを作成
for root, dirs, files in os.walk(root_folder):
for file in files:
if file.endswith('.csv'):
all_files.append(os.path.join(root, file))
# CSVファイルを読み込み、データフレームに結合
dataframes = []
for file in all_files:
encoding = detect_encoding(file)
df = pandas.read_csv(file, encoding=encoding)
dataframes.append(df)
merged_df = pandas.concat(dataframes, ignore_index=True)
# 現在日時を取得し、ファイル名に追加
now = datetime.now()
timestamp = now.strftime("%Y%m%d_%H%M%S")
output_file = os.path.join(output_folder, f"{timestamp}_merge.csv")
# 結合したデータフレームを新しいCSVファイルにUTF-8エンコーディングで保存
merged_df.to_csv(output_file, index=False, encoding='utf-8-sig')
# CSV格納ディレクトリ
root_folder = './target_csv_files'
# 結合ファイル保存先ディレクトリ
output_folder = './merged'
merge_csv_files(root_folder, output_folder)
ポイント
ソースコードのポイントは以下のとおりです。
- 各CSVファイルの保存形式を自動的に読み取り、適切な形式で結合保存可能
(日本語の文字化けも防止) - 出力フォルダを作成し忘れても自動作成される
- CSVファイルを再帰的に検出するため、結合対象のCSVファイル群を同じ階層に取り出さなくても使用可能
ディレクトリ構造
このソースコードを実際に使用する際は、ディレクトリ構造が重要になってきます。
具体的には、以下3つのファイル・ディレクトリは同じ階層に設置する必要があります。
- 実行ファイル(pyファイル)
- 結合したいCSVファイル群を格納するディレクトリ
- 結合後のCSVファイルを格納するディレクトリ
階層構造のイメージ図がこちらです。
ソースコードを正しく使用するためのディレクトリ構造
上記を踏まえた上で、実際にプログラムを使用するための準備をひとつずつ進めていきましょう!
「パス」のことをよく理解できていない場合はこちらをご覧ください
使用方法
# CSV格納ディレクトリ
root_folder = './target_csv_files'
STEP1で指定したディレクトリ(target_csv_files
)を任意の場所に作成し、その中にひとつにまとめたいCSVファイル群を配置します。
# 結合ファイル保存先ディレクトリ
output_folder = './merged'
こうすることで、ひとつにまとめられて新規作成されたCSVファイルはmerged
ディレクトリ内に生成されるようになります。
「root_folder」に指定したディレクトリと同じ階層にpyファイルを配置します。
そして、以下のコマンドでpyファイルを実行します。
python ファイル名.py
以上の手順により、実際に複数のCSVファイルをひとつにまとめることができます!
もしエラーが発生したら……
もしもエラーが発生した場合は、以下の点をご確認下さい。
- Pythonがインストールされているか
- pipがインストールされているか
- Pandas・Chardetがインストールされているか
- 結合したいCSVファイル群を配置したディレクトリ名とソースコードのroot_folderで指定したディレクトリ名が一致しているか
- 結合後のCSVファイル保存先ディレクトリ名とソースコードのoutput_folderで指定したディレクトリ名が一致しているか
- 実行ファイル(pyファイル)やCSVファイル群の格納ディレクトリ、結合後のCSVファイルの保存先ディレクトリが同じ階層にあるか
まとめ
以上がPythonで指定フォルダ内にあるすべてのCSVファイルをひとつに結合する方法のご紹介でした。
今回ご紹介したソースコードについては当然ながらご自由にお使いいただいて大丈夫です。
ご自身の環境やご状況に合わせて適宜 修正・調整してご活用いただければと思っています!
また、もし解説でわかりづらい箇所があればX(旧:Twitter)や当記事のコメント欄へメッセージをいただけますと幸いです。
それでは最後までご覧いただきありがとうございました!
コメント