LoginSignup
6
8

More than 1 year has passed since last update.

pythonの標準ライブラリでCSVを扱う

Last updated at Posted at 2021-02-18

CSV をリストで扱う

CSV ファイル読み込み

ファイルを open() で開いて、csv.reader() で読み込む。
読み込み後の各要素は文字列 str となる。

import csv

# 読み込む CSV
'''
11,12,13,14
21,22,23,24
31,32,33,34
'''
with open('./sample.csv') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)
# ['11', '12', '13', '14']
# ['21', '22', '23', '24']
# ['31', '32', '33', '34']

CSV ファイルを出力

ファイルを open() で開いて、csv.writer() で writer を取得する。
writerow() に書き込む値のリストを渡して書き込む。

import csv

with open('./sample.csv', 'w') as f:
	writer = csv.writer(f)
	writer.writerow([11, 12, 13])
	writer.writerow([21, 22, 23])
	writer.writerow([31, 32, 33])

# 出力される CSV
'''
11,12,13
21,22,23
31,32,33
'''

csv.reader(), csv.writer() の各引数

引数名 説明 デフォルト値
delimiter フィールドの区切り文字。 ',' (カンマ)
doublequote フィールド内の quotechar を自身でエスケープするかエスケープ文字でエスケープするか。
 True : 自身でエスケープ (quotechar が " ならば "")。
 False : escapechar でエスケープ (quotechar が ", escapechar が \ ならば ")。
True
escapechar エスケープ文字。
これに続く特殊文字をただの文字として扱う。
None
quotechar delimiter や quotechar といった特殊文字や改行文字を含むフィールドを囲む際に用いられる 1 文字。 '"' (ダブルクォーテーション)
skipinitialspace True の場合、delimiter の直後の空白は無視される。 False
lineterminator writer で CSV を出力する際の行終端文字。
ver 3.9.2 では readerの場合は無視される (変更される可能性あり)。
\r\n
strict True の場合、不正な CSV 入力に対して Error を出す。 False
quoting クォートが writer によって生成、reader によって認識されるタイミングを指定。
QUOTE_* 定数のいずれかをとる。
QUOTE_MINIMAL

CSV を辞書で扱う

CSV ファイル読み込み

ファイルを open() で開いて、csv.DictReader() で key にフィールド名、value にファイルから読み込んだ値を持つ辞書として読み込む。
fieldnames オプションを指定しなかった場合、ファイル 1 行目をフィールド名として扱う。

import csv

#読み込む CSV
'''
first_name,last_name
Eric,Idle
John,Cleese
'''
with open('./sample.csv') as f:
	reader = csv.DictReader(f)
	for row in reader:
		print(row)
# {'first_name': 'Eric', 'last_name': 'Idle'}
# {'first_name': 'John', 'last_name': 'Cleese'}

CSV ファイルを出力

ファイルを open() で開いて、csv.DictWriter() で writer を取得する。
writeheader() でフィールド名を、writerow() に辞書を渡して値を書き込む。
書き込み先のカラムを指定する必要があるため DictReader() と異なり fieldnames を省略することはできない。

import csv

with open('./sample.csv', 'w') as f:
	names = ['first_name', 'last_name']
	writer = csv.DictWriter(f, fieldnames=names)
	writer.writeheader() # names (= fieldnames に指定したリスト) を出力
	writer.writerow({'first_name': 'Eric', 'last_name': 'Idle'})
	writer.writerow({'first_name': 'John', 'last_name': 'Cleese'})
#出力される CSV
'''
first_name,last_name
Eric,Idle
John,Cleese
'''

csv.DictReader(), csv.DictWriter() の各引数

それぞれ reader()、writer() をベースにしているため各引数はそのまま利用可能。
DictReader(), DictWriter() 固有の引数は以下。

引数名 説明 デフォルト値
fieldnames CSV のフィールド名。
sequenceで指定し、指定しなかった場合は 1 行目の値をフィールド名として使用する。
DictWriter は省略不可。
None
restkey DictReader のみのオプション。
読み込んだ行に fieldnames よりも多くのフィールドが存在した場合、残りの値をリストにして restkey で指定した名前で保存する。
None
restval 空白行以外の行でフィールド数が fieldnames よりも少なかった場合、欠落している値は restval となる。 DictReader:None
DictWriter:''
extrasaction DictWriter のみのオプション。
writerow() に渡された辞書に fieldnames で定義されていないフィールドが存在した場合の動作を決定する。
 raise (デフォルト):ValueError が送出される。
 ignore:無視される。
raise
6
8
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
6
8