pythonでのcsvファイル書き込み
前回まで作っていたものを使って、データ収集の結果をまとめる必要が出てきました。。。
そこで、資料化するにあたってデータをcsvファイルにまとめることにしました!!
データベースに保存してから後でcsvファイル化も考えたのですが、少し手間だったので直接csvファイルに書き込むことにしました。
今までpythonでcsvファイルにまとめることをしてこなかったので、調べながら実施していきました。
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ファイルにまとめるのもいいな、と思いました!!