and one+

IT系の雑なメモを残していくブログです

【Python】CSV を保存する

f:id:Gyrokawai:20210305161212j:plain

最近は Python ばかり触っているのですが、色んなプログラムで使いまわしがちな、良い風に言えば流用度の高いコードをメモ(保存用)として残しておきます。

 

今回は「CSV を保存する」

 

参考サイト

Python に関する情報はまず以下のサイトを参照するのがベスト。基本的な使い方から応用まで幅広く助かります。 

note.nkmk.me

 

CSV を保存する

 

import os
import csv

# CSV書き込み
# DATASET -> リスト内リスト(マトリクス)
def writeFile_MatrixMode(OUTPUTFILE,FIELDNAMES,DATASET):
    #-- ファイルがない場合は作成する
    if os.path.isfile(OUTPUTFILE):
        pass
    else:
        with open(OUTPUTFILE, "w", newline='', encoding='utf-8') as f:
            #-- header
            fieldNames = FIELDNAMES
            writer = csv.DictWriter(f, fieldnames=fieldNames)
            writer.writeheader()
        f.close()

    #-- 書き込み処理(単純追加モード/追記)
    #---- 単純に追記しているのみで重複排除はしていない
    with open(OUTPUTFILE, "a", newline='', encoding='utf-8') as f:
        #-- body
        writer = csv.writer(f, quoting=csv.QUOTE_ALL)
        writer.writerows(DATASET)
    f.close()

単純にCSVを保存するだけの関数。

OUTPUTFILE に出力ファイル名文字列、FIELDNAMES にヘッダのリスト、DATASET にリスト内リスト(2次元リスト)を渡す。

一度変数を格納してから渡してたり、with で開いているのに律義に close してたり、判定を isfile にして pass してたりと、コード自体はまだ短くできる。(後で改修するときに面倒だから直してない)

 

from datetime import datetime

dtNow = datetime.now()
output_filename= 'folder\\OUTPUT_FILE_TITLE_' + dtNow.strftime('%Y%m%d') + '_' + dtNow.strftime('%H%M%S') + '.csv'
field_names= ['Alphabet', 'Number', 'Iroha']
dataset= [['A','1','い'],['B','2','ろ'],['C','3','は']]
writeFile_MatrixMode(output_filename, field_names, dataset)

こんな感じでセットしておいて関数を呼ぶ。

元々一次元リストを保存したくて作ったけど、派生で作った表形式(マトリクス)のリストをよく使う。重複排除モードも作ったけど長すぎて流用しにくい。

 

最新

最近は Pandas で成型することが多くなったので、そのまま df.to_csv で事足りることが多い。残念。

 

gyrokawai-memo.hatenablog.com

 

謝辞

参考サイトの皆さま、ありがとうございました。