技術メモ

役に立てる技術的な何か、時々自分用の覚書。幅広く色々なことに興味があります。

エクセルで編集したデータをそれぞれのシート名でCSVに変換する【python】

動作確認環境

python3.6.1
pandasが必要。必要に応じて以下コマンドでインストールする。

pip install pandas

コード

import pandas as pd
import sys

def excel_to_csv(filename,
                target_sheet_index = None,
                target_folder = "./"):
    '''
    エクセルで編集したデータをそれぞれのシート名でCSVに変換する
    
    Parameters
    ----------
    filename: string
        変換元のエクセルファイル
    target_sheet_index: list of int
        何番目のシートを変換するかをリストで表記。
        0番目から始まる。指定しない場合は全シートが選ばれる。
    target_folder: string, default './'
        フォルダ名を指定して出力。
    '''

    excel_file = pd.ExcelFile(filename)
    sheetnames = excel_file.sheet_names
    excel_file.close()
    if target_sheet_index == None:
        target_sheet_index = range(len(sheetnames))
    for i in target_sheet_index:
        try:
            data = pd.read_excel(filename, sheet_name = sheetnames[i])
            output_file = target_folder + sheetnames[i] + '.csv'
            data.to_csv(output_file, index = False, date_format='%Y/%m/%d')
            print('convert success: ' + sheetnames[i])
        except Exception as error:
            print(error)
            continue
        
if __name__=="__main__":
    filename = sys.argv[1]
    try:
        target_sheet_num = int(sys.argv[2])
        target_sheet_index = list(range(target_sheet_num))
    except IndexError:
        target_sheet_index = None
    excel_to_csv(filename=filename,
                target_sheet_index=target_sheet_index, 
                target_folder="./data/")