【Python3】CSVファイルを作って一行ずつ追記していく

CSVファイルを作る

import csv
from os import path

def create(filepath,headers_list):
    if path.exists(filepath):
        raise FileExistsError("もうある")
    try:
        with open(filepath, "wt", encoding="utf-8", newline="") as file_object:
            writer = csv.writer(file_object)
            writer.writerow(headers_list)
        return filepath
    except Exception as e:
        raise Exception(e)  

ファイルの存在確認をして、なければ作る。
csvモジュールをimportしておいて、csv.witerを使って書き込むと、カンマのエスケープなどを自動でやってくれるのでありがたい。

一行分の情報をリストで渡すと一行分追記する

def append(filepath, line):
    # 1行渡すとCSVに1行追記する 
    try:
        with open(filepath, "a", encoding="utf-8", newline="") as file_object:
            writer = csv.writer(file_object)
            writer.writerow(line)
        return filepath
    except Exception as e:
        raise Exception(e)

一件の処理が終わったら一行分情報を追記していく。
処理の結果をためておいて一気に書き込む方法を採用していると、処理が途中でコケたときに泣く。私は3万件の処理をうっかり一気に回してしまって8時間後に処理がコケてすべてが無になりました。やめよう。
というわけでちゃんと一行一行保存するようにしました。

ついでにCSVを読み込む機能もくっつけてCSV管理クラスまとめ。

class LocalCsvFile():
    def __init__(self, filepath) -> None:
        self.filepath = filepath
        self.is_exists = path.exists(self.filepath)
    
    def create(self,headers_list):
        if path.exists(self.filepath):
            raise FileExistsError("もうある")
        try:
            with open(self.filepath, "wt", encoding="utf-8", newline="") as file_object:
                writer = csv.writer(file_object)
                writer.writerow(headers_list)
            return self.filepath
        except Exception as e:
            raise Exception(e)        


    def append(self, line):
        # 1行渡すとCSVに1行追記する 
        try:
            with open(self.filepath, "a", encoding="utf-8", newline="") as file_object:
                writer = csv.writer(file_object)
                writer.writerow(line)
            return self.filepath
        except Exception as e:
            raise Exception(e)

    def read(self):
        try:
            with open(self.filepath, "r") as file_object:
                reader = csv.reader(file_object)
                list_of_rows = list(reader)
                return list_of_rows
        except Exception as e:
            raise Exception(e)

この記事が気に入ったらサポートをしてみませんか?