1
1

More than 3 years have passed since last update.

python学習(補足)

Posted at

先に記載した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メソッドを使うという理解をした。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1