「巨大なデータをコピーしてスプレッドシートに貼り付けようとしたら、エラーで弾かれた…」
「インポートしようとしても『ファイルが大きすぎます』と拒否される…」
Googleスプレッドシートには、1セルあたり最大50,000文字、1ファイルあたり最大1,000万セルという厳格な制限があります。これを超えると、通常のインポート作業は一切受け付けられません。
この記事では、Pythonを使って「1セルの文字数を自動で切り詰め」ながら「扱いやすいサイズにファイルを分割」する方法を解説します。
1. 解決したい問題
TSVやCSVを扱う際、以下のようなエラーに遭遇することがあります。
- 貼り付け時: 「問題が発生しました。入力内容が 1 つのセルに最大 50000 文字の制限を超えています。」
- インポート時: 「サイズが大きすぎてインポートできません。行か列を削除して、もう一度お試しください。」
これを解決するため、「1セルあたりの文字数制限」と「行数分割」を同時に行うスクリプトを作成します。
2. Pythonスクリプトの準備
以下のコードを split_tsv.py という名前で保存してください。
import pandas as pd
import sys
import os
import csv
def split_tsv(input_file):
rows_per_file = 30000
max_char_limit = 45000
if not os.path.exists(input_file):
print(f"エラー: ファイル '{input_file}' が見つかりません。")
return
base_name = os.path.splitext(os.path.basename(input_file))[0]
try:
reader = pd.read_csv(
input_file,
sep='\t',
chunksize=rows_per_file,
quoting=csv.QUOTE_NONE,
on_bad_lines='warn', # 不正行があればターミナルに表示
skip_blank_lines=False, # 空行を数に含める
engine='python'
)
total_processed_rows = 0
for i, chunk in enumerate(reader):
# 文字数制限を適用
chunk = chunk.applymap(lambda x: str(x)[:max_char_limit] if isinstance(x, str) else x)
output_file = f"{base_name}_split_result_{i+1}.tsv"
# 出力時も引用符を付けず、タブ区切りを維持
chunk.to_csv(output_file, sep='\t', index=False, encoding='utf-8-sig', quoting=csv.QUOTE_NONE)
total_processed_rows += len(chunk)
print(f"作成完了: {output_file} ({len(chunk)}行)")
print(f"\n--- 最終集計 ---")
print(f"Pythonが読み込んだデータ行数: {total_processed_rows}")
print(f"ヘッダー(1行)を足した合計: {total_processed_rows + 1}")
except Exception as e:
print(f"実行エラー: {e}")
if __name__ == "__main__":
if len(sys.argv) > 1:
split_tsv(sys.argv[1])
else:
print("使用法: python3 split_tsv.py [ファイル名.tsv]")
3. Macターミナルでの実行手順
Mac標準の「ターミナル」を使って実行します。
ステップ1:必要なライブラリのインストール
一度も Pandas を使ったことがない場合は、まず以下のコマンドを入力します。
pip3 install pandas
ステップ2:ファイルのあるフォルダへ移動
ターミナルを開き、cd(チェンジディレクトリ)コマンドを使って、スクリプトとTSVファイルがある場所に移動します。
-- 自分のスクリプトを保存したディレクトリに移動する cd /Users/あなたのユーザー名/Documents/data_folder
※フォルダをターミナルにドラッグ&ドロップするとパスが自動入力されます。
ステップ3:スクリプトの実行
分割したいファイル名を指定して実行します。
python3 split_tsv.py target_data.tsv
実行が完了すると、
- {入力ファイル名}_
split_result_1.tsv - {入力ファイル名}_
split_result_2.tsv...
と分割されたファイルが生成されます。
4. なぜこの方法が良いのか?
| 機能 | メリット |
| 文字数カット | スプレッドシート特有の「5万文字制限」を物理的に回避できる。 |
| 行数分割 | 1ファイルあたりのセル数を抑え、シートが重くなるのを防ぐ。 |
| BOM付きUTF-8 | Excelやスプレッドシートで開いた際の文字化けを防ぐ。 |
| メモリ効率 | chunksize を使っているため、数GBの巨大ファイルでもPCがフリーズしにくい。 |
5. まとめ
スプレッドシートで扱えないほどの巨大データは、無理に開こうとせず「プログラムで前処理」をするのが最も近道です。
特に1セルに長い文章(ログ、スクレイピング結果、長文テキストなど)が入っている場合は、今回紹介した文字数カット(applymap)の手法が非常に有効です。
ぜひ、データ分析の下準備に活用してみてください!


