先に記載したpythonのCSVモジュールについての補足である
正直ドキュメントやググれば分かる内容だが、
備忘録として残しておく
CSVファイルを開いて別ファイルにそのまま書き出したい場合
リスト形式で渡すにはreaderメソッドを使う
この時readerメソッドの返り値はもちろんリスト形式となる
import csv
data=[]
#CSVをリスト形式で読み込む
with open('data.csv' , 'r', newline='' , encoding='utf-8') as f:
r = csv.reader(f)
data = [ i for i in r ]
#CSVをリスト形式で書き込む
with open('data.csv' , 'w', newline='' , encoding='utf-8') as f:
w = csv.writer(f)
w.writerows(data)
この時dataに入るのは以下のような多重リストとなる
[['python', '1'], ['php', '1']]
writerowで書き込む時は引数としてはリストが渡されるのだが、
上記のような多重リストの場合はwriterowsとしなければいけないところが注意
試しにwriterowとやった場合は以下のような返り値となる(一行のリストとして返ってくる)
"['python', '1']","['php', '1']"
writerowsとやった場合はきちんと以下のような返り値となる
python,2
php,2
辞書形式で渡すにはDictReaderメソッドを使う
この時DictReaderメソッドの返り値はもちろん辞書形式となる
from collections import defaultdict
import csv
data = defaultdict(int)
with open('data.csv' , 'r', newline='' , encoding='utf-8') as f:
r = csv.DictReader(f)
data = [ i for i in r ] #リスト内に辞書を格納
with open('data.csv' , 'w', newline='' , encoding='utf-8') as f:
fieldnames =['Name', 'Count']
w = csv.DictWriter(f, fieldnames= fieldnames)
w.writerows(data)
リストの時と同様に変数の中を見ていくとdata変数に入るのは以下の通り
[{'Name': 'python', 'Count': '1'}, {'Name': 'php', 'Count': '1'}]
今度は辞書としてキーとバリューが入ってくる
書き込む際はwriterowメソッドには引数としてリストが渡されるので、
実際はリストで辞書の中身を渡すイメージとなる
リストの時と同様にwriterowで書き込もうとすると以下の通りAttributeErrorとなる
リストオブジェクトにはkeyという属性はありませんと怒られる
AttributeError: 'list' object has no attribute 'keys'
writerowsを使えばリストの時と同様に以下のように書き込める
python,1
php,1
基本リストも辞書も多重で渡す場合はwriterowsメソッドを使うという理解をした。