データ処理・分析やレポート作成業務において、TXTテキストファイルは形式の柔軟性から広く活用されています。一方、CSV形式は構造化データに対応し、Excel・Pandas・各種データベースから容易に読み込み・解析可能な強みから、データ連携における標準的な形式として定着しています。
本記事ではPythonと無料ライブラリ「Free Spire.XLS」を活用し、TXTをCSVへ効率的に変換する実装方法を解説します。基本的な単純変換や区切り文字のカスタマイズといった主要ケースに対応しており、プログラミング未経験の方でもスムーズに活用できます。
記事目次
1. 環境準備:無料Pythonライブラリのインストール
Free Spire.XLS for Pythonは無料で利用可能なExcel・CSV操作用ライブラリです。
ローカルにMicrosoft Excelをインストールせずとも、ファイル形式変換やデータ入出力処理を実行できます。ただし無料版には、出力ページ数・処理量に制限が設けられています。
1.1 pipインストールコマンド
pipから簡単に導入でき、Python 3.6以上のバージョンに対応しています。
pip install Spire.Xls.Free
1.2 インストール失敗時の対処法
導入が正常に完了しない場合は、下記の方法をお試しください。
- pipを最新版にアップグレード:
python -m pip install --upgrade pip - 公式サイトよりwhlファイルを手動でダウンロードし、ローカルインストールを実施
2. 基本実装:カンマ区切りTXTのCSV変換
2.1 利用ケース
変換対象のdata.txtは、カンマを区切り文字とした以下の内容と仮定します。
氏名,年齢,都市,職業
佐藤健,25,東京,プログラマー
鈴木悠斗,30,大阪,プロダクトマネージャー
高橋美桜,28,横浜,Webデザイナー
2.2 Pythonコード実装
from spire.xls import *
from spire.xls.common import *
def txt_to_csv_basic(txt_path, csv_path):
# 1. ワークブックオブジェクトを生成
workbook = Workbook()
# 2. 先頭のワークシートを取得
worksheet = workbook.Worksheets[0]
# 3. TXTファイルをUTF-8で読み込み
with open(txt_path, 'r', encoding='utf-8') as f:
lines = f.readlines()
# 4. TXTの内容をワークシートへ出力
row_index = 1 # Spire.XLSの行番号は1から開始
for line in lines:
# 改行コードを除去し、カンマでデータ分割
row_data = line.strip().split(',')
col_index = 1
for cell_value in row_data:
# 各セルにデータを記載
worksheet.Range[row_index, col_index].Text = cell_value
col_index += 1
row_index += 1
# 5. CSV形式でファイル保存
workbook.SaveToFile(csv_path, FileFormat.CSV)
workbook.Dispose() # リソース解放
print(f"基本変換処理が完了しました。CSV出力先:{csv_path}")
# メイン実行
if __name__ == "__main__":
txt_file = "data.txt"
csv_file = "output_basic.csv"
txt_to_csv_basic(txt_file, csv_file)
変換後のCSVファイル
上記TXTの内容を基に、標準的なCSVファイルが自動生成されます。

2.3 コード解説
-
Workbook():Excelワークブックオブジェクトを作成し、Spire.XLS処理の基盤となります。 -
Worksheets[]:任意のワークシートを呼び出し、外部データの格納先として使用します。 - TXTを1行ずつ読み込み、区切り文字で分割後、セル単位でシートへ出力します。
-
SaveToFile():引数にFileFormat.CSVを指定することで、シートデータをCSVファイルとして出力可能です。
3. 応用ケース:区切り文字の独自設定
data_tab.txtがタブ文字でデータ区切りされている場合:
氏名 年齢 都市 職業
佐藤健 25 東京 プログラマー
鈴木悠斗 30 大阪 プロダクトマネージャー
分割処理の記述を\tに変更するだけで対応可能です。
from spire.xls import *
from spire.xls.common import *
def txt_to_csv_tab_separator(txt_path, csv_path):
workbook = Workbook()
worksheet = workbook.Worksheets[0]
with open(txt_path, 'r', encoding='utf-8') as f:
lines = f.readlines()
row_index = 1
for line in lines:
row_data = line.strip().split('\t') # タブ文字で分割
col_index = 1
for cell_value in row_data:
worksheet.Range[row_index, col_index].Text = cell_value
col_index += 1
row_index += 1
workbook.SaveToFile(csv_path, FileFormat.CSV)
workbook.Dispose()
print(f"タブ区切り形式の変換が完了しました。出力先:{csv_path}")
# 関数実行
txt_to_csv_tab_separator("data_tab.txt", "output_tab.csv")
4. 拡張機能:複数TXTファイルの一括変換
フォルダ内の全TXTファイルをまとめてCSVへ変換したい場合は、osモジュールを併用します。
import os
def batch_txt_to_csv(txt_folder, csv_folder):
# 出力用フォルダが存在しない場合、新規作成
if not os.path.exists(csv_folder):
os.makedirs(csv_folder)
# 対象フォルダ内のファイルを走査
for file_name in os.listdir(txt_folder):
if file_name.endswith(".txt"):
txt_path = os.path.join(txt_folder, file_name)
# 拡張子を置換しCSVファイル名を生成
csv_name = file_name.replace(".txt", ".csv")
csv_path = os.path.join(csv_folder, csv_name)
# 基本変換関数を呼び出し
txt_to_csv_basic(txt_path, csv_path)
print(f"一括変換が完了しました。全CSVファイル出力先:{csv_folder}")
# 実行例:txt_files内のTXTをcsv_filesへ一括出力
batch_txt_to_csv("txt_files", "csv_files")
まとめ
本稿ではFree Spire.XLS for Pythonを用い、TXTからCSVへの多様な変換処理を実装しました。
基本的な単独変換・区切り文字のカスタマイズ・複数ファイルの一括処理に対応しており、従来の手法と比較してコードが簡潔で動作も安定しています。
また本ライブラリはTXT⇄CSVの変換に限らず、CSV・Excel・TXT間の相互フォーマット変換にも対応し、業務における多様なデータ処理ニーズに対応できます。