Open1
OpenPyXLのwrite_onlyフラグ
openpyxlのwrite_only
フラグは、大量のデータをExcelファイルに書き込む際のメモリ効率を大幅に改善するオプション。
write_onlyモードの特徴
メモリ効率
- 通常モードでは全てのセルデータがメモリに保持されますが、write_onlyモードでは書き込み後すぐにメモリから解放される。
- 数百万行のデータを扱う場合、メモリ使用量を大幅に削減できる。
制限事項
- セルの読み取りができない(書き込み専用)
- セルの値を後から変更できない
- 数式の結果を取得できない
- ワークシートの既存データにアクセスできない
使用方法
from openpyxl import Workbook
# write_onlyモードでワークブック作成
wb = Workbook(write_only=True)
ws = wb.create_sheet()
# データの書き込み
for row in range(1, 100000):
ws.append([f'データ{row}', row * 2, row * 3])
wb.save('大量データ.xlsx')
通常モードとの比較
# 通常モード(小〜中規模データ向け)
wb_normal = Workbook()
ws_normal = wb_normal.active
ws_normal['A1'] = 'テスト' # セルへの個別アクセス可能
# write_onlyモード(大規模データ向け)
wb_write_only = Workbook(write_only=True)
ws_write_only = wb_write_only.create_sheet()
# ws_write_only['A1'] = 'テスト' # エラー:個別セルアクセス不可
ws_write_only.append(['テスト']) # append()のみ使用可能
大量のデータを扱う場合や、メモリ使用量を抑えたい場合にwrite_only=True
を設定することで、パフォーマンスを大幅に向上させることができる。