【Python】標準ライブラリでcsvファイルを編集する

IT

今回やりたかったこと

  • csvを入力し、中の値を処理し、新しく列を追加して出力
  • 今回の例では
    • 入力csv → 果物の名前と価格
    • 出力csv → ↑の価格から税込価格を計算し、新しい列で追記

サンプルコード

  • まず今回確認したコードと入出力を記載
  • その後各要素について、確認したことをmemoしていきます

入力

fruit, price
apple, 150
banana, 200
orange, 120

コード

import csv

if __name__ == '__main__':
   # ファイルopen(読み込み用)
    with open('./test_in.csv') as f1:
        # ファイルのopen(書き込み用)
        with open('./test_out.csv', 'w') as f2:
            # 読み込み操作用readerの設定
            reader = csv.reader(f1)
            # 書き込み操作用writerの設定
            writer = csv.writer(f2)

            # 一行目のヘッダは処理しないので、区別のための変数
            header_flag = 0
            # 一行ずつ読み込み→処理→書き込み
            for row in reader:
                # 1行目(ヘッダー)の時は新しいヘッダーを追記
                if(header_flag == 0):
                    # ヘッダーフラグを1にして2行目行こうはこの処理に飛ばないようにする
                    header_flag = 1
                    # ヘッダーを追記
                    row.append("include tax")
                    # 書き込み
                    writer.writerow(row)
                    continue

                # 2行目行こうは税込価格の計算をして追記
                # priceを取得して、税率8%を計算
                tax = float(row[1]) * 1.08
                # 小数点以下を四捨五入して追記
                row.append(round(tax))
                # 書き込み
                writer.writerow(row)

結果確認

確認したことmemo

サンプルコードで書いたコードで確認したことをmemo

impoet

  • 今回は標準ライブラリのcsvを使用
  • コードの最初にimport csv
    import csv

ファイルオープン

  • csvライブラリを使用する場合はwith openでファイルを開く必要がある
  • with open('【ファイルパス】') as ファイル変数名:
  • with open以下をインデントリを下げる
    • 下げたインデントリ内では開いたファイルを変数名で使用できる
  • 例:カレントディレクトリ"./test_in.csv"を変数"f1"で開く時
    with open('./test_in.csv') as f1:

読み込みと書き込み

  • 読み込み、書き込みについては以下でまとめた

  • 今回の例

    • 読み込み
    • reader = csv.reader(f1)f1の読み込み設定
    • for row in reader:で一行ずつ読んでいく
    • 書き込み
    • writer = csv.writer(f2)で'f2'の書き込み設定
    • writer.writerow(row)で一行ずつ読んだrowを書き込み

入力の値を処理

  • csv.readerで読んだcsvはリスト形式で一行ずつ読める
  • リストと同じように処理する
    • 今回はprice(左から2番目)の値を使用したいので、一行ずつ読んだrowに対して
      row[1]
      でpriceを取得
  • 要素を足す場合はappendで追加
    • row.append(【追加する値】)

コメント

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