Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

pythonでのcsvファイル書き込み

前回まで作っていたものを使って、データ収集の結果をまとめる必要が出てきました。。。
そこで、資料化するにあたってデータをcsvファイルにまとめることにしました!!

データベースに保存してから後でcsvファイル化も考えたのですが、少し手間だったので直接csvファイルに書き込むことにしました。


今までpythoncsvファイルにまとめることをしてこなかったので、調べながら実施していきました。
csvファイルをExcelで開いた時に文字化けする等、問題も発生し手こずったため備忘録で残しておこうと思います。

csvファイルへの書き込むコードはこちらになります。

with open('test.csv','a',newline='', encoding='utf_8_sig') as csvFile:
    csvwriter = csv.writer(csvFile, delimiter=',',quotechar='"', quoting=csv.QUOTE_NONNUMERIC)
    csvwriter .writerow([1,'AAA','aaa'])
    csvwriter .writerow([2,'BBB','bbb'])

'a'を指定することにより、追記モードにすることが出来ます。
合わせて、newline=''をオプションで指定しないと1行ごとに空き行が生成されてしまうようです。
最後に、、、
Excelファイルで開いても文字化けしないようにencoding='utf_8_sig'をオプション指定。

jsonファイルを送信するためにはこちらを用いればよいです。
※前提として、jsonデータですが、

jsn = { "name": "Tanaka", "age": 26 ,"job":"AAA"}

とします。

csvParam = []

name = jsn['name']
age = jsn['age']
job  = jsn['job']

csvParam.append([name,age,job])


with open("test.csv",'a',newline='', encoding='utf_8_sig') as csvFile:
    csvwriter = csv.writer(csvFile, delimiter=',',quotechar='"', quoting=csv.QUOTE_NONNUMERIC)
    for param in csvParam:
        csvwriter.writerow(param)

さらにさらに、、、
csvファイルにヘッダーとか付けたくなりますよね。

で!!
csv初回生成時か判定するための処理として下記を利用します。

if os.path.exists('test.csv') == False:
    with open('test.csv','a',newline='', encoding='utf_8_sig') as csvFile:
        csvwriter = csv.writer(csvFile, delimiter=',',quotechar='"', quoting=csv.QUOTE_NONNUMERIC)
        csvwriter.writerow(['名前','年齢','仕事'])

ここまで。
全ソースはこちらのようになります。

import requests
import json
import csv
import os

C_FILENAME = "test.csv"

csvParam = []

name = jsn['name']
age = jsn['age']
job  = jsn['job']

csvParam.append([name,age,job])

if os.path.exists(C_FILENAME) == False:
    with open(C_FILENAME ,'a',newline='', encoding='utf_8_sig') as csvFile:
        csvwriter = csv.writer(csvFile, delimiter=',',quotechar='"', quoting=csv.QUOTE_NONNUMERIC)
        csvwriter.writerow(['名前','年齢','仕事'])

with open(C_FILENAME,'a',newline='', encoding='utf_8_sig') as csvFile:
    csvwriter = csv.writer(csvFile, delimiter=',',quotechar='"', quoting=csv.QUOTE_NONNUMERIC)
    for param in csvParam:
        csvwriter.writerow(param)

分かると結構簡単にcsvファイル化することが出来ました。
DBもいいけど、csvファイルにまとめるのもいいな、と思いました!!