Pythonでファイルを分割・結合する方法!データ分割テクニック入門
先生と生徒の会話形式で理解しよう
生徒
「先生、大きなファイルを小さく分けたいときって、Pythonでどうすればいいですか?」
先生
「Pythonでは、ファイルを分割して別々のファイルに書き出すことができます。逆に、複数のファイルを一つに結合することも簡単にできます。」
生徒
「分割や結合って、具体的にはどういう風に操作するんですか?」
先生
「それでは、基本の方法と応用例を一緒に見ていきましょう。」
1. ファイルを分割する基本
大きなテキストファイルを複数の小さなファイルに分けるには、行ごとに読み込み、一定の行数ごとに新しいファイルに書き出します。
chunk_size = 100 # 1つのファイルに書き込む行数
with open("large_file.txt", "r", encoding="utf-8") as infile:
lines = infile.readlines()
for i in range(0, len(lines), chunk_size):
with open(f"part_{i//chunk_size + 1}.txt", "w", encoding="utf-8") as outfile:
outfile.writelines(lines[i:i+chunk_size])
ポイント:
chunk_sizeで1つの分割ファイルに何行書くかを指定- 行ごとに処理することで、メモリの無駄を抑えつつ分割可能
- ファイル名に番号をつけて、順番をわかりやすくしている
2. ファイルを結合する基本
分割されたファイルを1つにまとめるには、順番に読み込み、書き込み用のファイルに連結します。
files = ["part_1.txt", "part_2.txt", "part_3.txt"]
with open("merged_file.txt", "w", encoding="utf-8") as outfile:
for filename in files:
with open(filename, "r", encoding="utf-8") as infile:
outfile.write(infile.read() + "\n")
ポイント:
- 出力ファイルは1つだけで、内部で順番に読み込んで書き込む
- 改行を入れることで、元のファイルの区切りがわかるようにしている
- 分割したファイルが複数あっても簡単に結合できる
3. 大きなファイルを効率よく分割する方法
メモリに大きなファイル全体を読み込むと、処理が遅くなることがあります。そんなときは、行ごとに順番に読み込みながら分割します。
chunk_size = 100
file_count = 1
line_count = 0
outfile = open(f"part_{file_count}.txt", "w", encoding="utf-8")
with open("large_file.txt", "r", encoding="utf-8") as infile:
for line in infile:
outfile.write(line)
line_count += 1
if line_count >= chunk_size:
outfile.close()
file_count += 1
line_count = 0
outfile = open(f"part_{file_count}.txt", "w", encoding="utf-8")
outfile.close()
ポイント:
- 全体を一度に読み込まず、行ごとに処理
- 分割ごとにファイルを自動で切り替え
- 大きなファイルでもメモリ消費を抑えながら分割可能
4. 応用例:分割ファイルを順番に結合して加工
複数の分割ファイルを結合しながら、特定の文字列だけを抽出して新しいファイルに書き込む例です。
files = ["part_1.txt", "part_2.txt", "part_3.txt"]
with open("filtered_merged.txt", "w", encoding="utf-8") as outfile:
for filename in files:
with open(filename, "r", encoding="utf-8") as infile:
for line in infile:
if "重要" in line: # "重要"という文字が含まれる行だけ書き込む
outfile.write(line)
ポイント:
- 結合と同時にデータのフィルタリングが可能
- 複数ファイルを扱う処理を効率的にまとめられる
- テキストデータの分析や整理にも活用できる
5. 注意点とベストプラクティス
- ファイル分割時は、行数やサイズを意識して分割する
- 結合するファイルの順番を間違えないように注意
- エンコーディングを統一することで文字化けを防止
- 分割・結合処理の前に必ずバックアップをとる
- Pythonの
with構文を活用することで、ファイル操作の安全性が高まる