[Python基礎]PythonでCSVファイルを出力する

Python

2020/06/24追記: CSVファイルの読み込みに関する記事もまとめてみましたのでそちらも是非ご覧ください!

スポンサーリンク

はじめに

今回はPythonで処理したデータをCSVファイルに書き込む方法を、ソースコードと共に解説いたします。

処理の流れとしては、Python側で適当なデータをリストに書き込み、Python標準モジュールのひとつ、csvモジュールを用いてリストに格納されたデータをCSVファイルに出力という流れになります。

CSVファイルに出力することで、データを整理された状態にすることが出来るためとても便利です。また、ソースコード自体も簡単なので応用しやすいです。

リスト(list)については、こちらの記事に解説および基本的な使い方を書きました。参考になれば幸いです。

ソースコード

現在時刻を5秒間 1秒刻みでリストに記録し、リストの中身をCSVに出力するプログラムを用いて解説します。プログラムを実行し、生成されたCSVをExcelで開いてみると画像のように表示されます。

ソースコードは以下です。

import datetime as dt 
import csv #csvファイルをpythonで扱うためのモジュール
from time import sleep 

if __name__ == '__main__': #別のプログラムでのimport時の誤作動防止のおまじない
    count = 5 #繰り返し数
    time_list = [] #リストを定義
    time_list.append(["カウンタ", "時", "分", "秒"]) #項目名

    for i in range(count): #繰り返し文
        today = dt.datetime.today() #現在時刻を取得(厳密には年月日等も取得している)
        time_list.append([i+1, today.hour, today.minute, today.second]) #現在時刻をlistに出力
        i+=1 #カウント用
        sleep(1) #1秒間処理を停止
    
    with open("time_utf-16.csv", "w", newline="", encoding="utf-16") as f: #csvファイルを書き込みモードで開く
        writer = csv.writer(f, dialect="excel-tab") #書き込み設定
        writer.writerows(time_list) #listに記録した時間をcsvに出力 #time_listは多次元配列になっているのでwriterows。1次元であればwriterowで十分

CSVファイルに出力する上でのポイントをピックアップして解説します。

import csv

CSVファイルをPythonで扱うために必要なモジュールcsvをインポート。必ず書く。

with open(“abcd.csv”, “w”, newline=””, encoding=”utf-16″) as f:

with open()とはファイルを開くための関数です。open()という関数もあるのですが、同時にclose()というファイルを閉じる関数も併せて書かないといけないため、少々厄介です。このような煩わしさを避けるためにwith openを用いています。

以下はwith openの引数の意味です。

  • 第一引数: 開きたいファイルの名前
  • 第二引数: 書き込みモード(w)か読み込みモード(r)どちらか指定する
  • 第三引数: 余計な空白行を消すために書く
  • 第四引数: エンコーディングの形式を指定

それぞれの引数についてもう少し解説します。

第一引数は開きたいファイルの名前を指定します。フォルダに同名のファイルが無くても勝手に生成してくれるので、名前は適当で大丈夫ですが拡張子は必ずcsvにします。(csv以外のファイルでもwith open出来るが、この後の処理を適宜書き換える必要がある)

第二引数はファイルを開いて書き込むのか、読み取るのかで変えます。今回は書き込みなので、”w”と指定します。

第三引数について、newline=”” を記入しないと以下のように書き込まれてしまいます。空白の行が発生して、見づらいので書くことをお勧めします。

第四引数はエンコーディングの指定です。詳しく書くと長くなるので理由は省略しますが、日本語を含んだCSVファイルをExcelで開きたい場合は、UTF-16を指定しましょう。UTF-8やshift-jisを指定すると恐らく文字化け又はエラーが発生します。

writer = csv.writer(f, dialect=”excel-tab”)

CSVファイルにリストの中身を書き込むために必要な各種設定をするための関数がcsv.writerという解釈でいいと思います。(間違っていたらすみません

これまでに設定したものをここではwriterという名前のオブジェクトに代入します。

また、dialect=”excel-tab”と第二引数に追加で書いてあげることで、Excelで表示したときにちゃんとカンマ区切りされるので必ず書きましょう。もし書かないと以下の画像のようにExcel側がカンマを認識してくれません。

writer.writerows(abcd_list)

writerowsを用いてリストの中身をCSVファイルに書き込みます。

writerowsを用いることで、リストの中身が6×4の多次元配列になっていても適切に表示されます。

writerowという一文字だけ違う関数もあるのですが、こちらを使うとリストの中身を6×1の1次元配列として認識されてしまうのでこのように表示されてしまいます。状況によって使い分けましょう。

お疲れさまでしたm(_ _)m

マスルキン

当ブログ管理人のマスルキンです。

高専電気系学科に5年間在籍。卒業後は専攻科に進学し現在に至る。

生まれつき聴覚障害があり
補聴器の使用、コミュニケーションでは読唇や手話などを用いています。

当ブログでは
・プログラミング・研究関係の備忘録
・趣味(筋トレ、カメラ、プラモデル、etc...)
・自身の日常
などを自由気ままに皆様に発信いたします。

記事が皆様のお役に立てば幸いです。

マスルキンをフォローする
Python プログラミング
スポンサーリンク
マスルキンをフォローする
マスルキンの部屋

コメント

  1. […] 以前、PythonでCSVファイルを出力する方法をまとめました。今回は反対にCSVファイルを読み込み、Python上で処理する方法について、まとめてみました。 […]

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