エクセルをシート毎にcsv化し、ファイル保存せずにzipファイルに圧縮する方法

Python

概要

  • ツール置き場用の機能として追加したかった。
  • エクセルシートをローカルに保存せずに、csv化する
  • バッファのcsvをzipファイルに圧縮して保存する

エクセルシートをCSV化する方法(ファイルを保存せずに)

ソースコード
import pandas as pd
import io
import zipfile

# zipファイル一時保管
zip_buff = io.BytesIO()

for file in files: #Excelファイル数分ループ
    wb = pd.ExcelFile(file) #Excelファイル読み込み
    for ws in wb.sheet_names: #各シートをループで読み込み
        sheet = pd.read_excel(file,ws,index_col=None,header=None)
        # ZIPファイルに結合
        ## csv一時保存場所
        buffer = io.BytesIO()
     #各シートをbufferにcsvで保存(ファイル書き込みはしない。)
        sheet.to_csv(buffer,
                     encoding='utf-8',
                     index_label=None,
                     index=None,
                     header=None)
    #bufferに保存されたcsvをZIPファイルに格納
    #zip_buffは保存先のファイルパスでも可(本ソースコードでは、バッファに保存している)
        with zipfile.ZipFile(zip_buff,'a',compression=zipfile.ZIP_DEFLATED) as result_zip:
            result_zip.writestr(f'{ws}.csv',buffer.getvalue())

Flaskにエクセルのシートをcsv化する機能を実装した

  • ツール置き場の一つの機能として実装した。
  • ファイル書き込み・読み込みを何度もすると処理が遅くなるので、バッファでやることにした。
  • たぶんファイルを経由するより早いです。

コメント

タイトルとURLをコピーしました