【Python】csvライブラリの活用

概要

Pythonにはcsvを扱うための標準ライブラリがあります。

こちらを利用すれば、csvファイルの読み込み、書き込みの処理を行うことができます。

使用するダミーデータは以下になります。
名前はtestdata.csvで文字コードはutf-8です。

 1ID,姓,年齢,都道府県
 21,牛島,36,大分県
 32,大滝,24,石川県
 43,金丸,58,福岡県
 54,伏見,25,岡山県
 65,稲村,13,石川県
 76,脇本,23,千葉県
 87,赤井,62,広島県
 98,野尻,37,福島県
109,長嶋,35,広島県
1110,成沢,58,福島県

csvモジュールの使用方法

csvの読み込み

with文とcsv.readerを使用してcsvファイルを読み込みます。

1import csv
2
3with open('testdata.csv', encoding='utf-8', newline='') as f:
4    reader = csv.reader(f)
5    for row in reader:
6        print(row)  # ['ID', '姓', '年齢', '都道府県']...

csvモジュールで改行処理を行うので、open関数のnewlineを''とします。

またはcsv.DictReaderでデータをdictで読み込みます。

1import csv
2
3with open('testdata.csv', encoding='utf-8', newline='') as f:
4    reader = csv.DictReader(f)
5    for row in reader:
6        print(row['ID'], row['姓'], row['年齢'], row['都道府県'])  # 1 牛島 36 大分県...

readerでcsvファイルのヘッダーを飛ばしたいときはreaderオブジェクト作成直後にnextメソッドを使用して
ヘッダー行を飛ばします。

1import csv
2
3with open('testdata.csv', encoding='utf-8', newline='') as f:
4    reader = csv.reader(f, delimiter=',')
5    next(reader)  # nextメソッドを使用して、ヘッダーを飛ばす
6    for row in reader:
7        print(row)  # ['1', '牛島', '36', '大分県']...

csvの内容をDictionaryに格納するサンプルです。

 1import csv
 2
 3with open('testdata.csv', encoding='utf-8', newline='') as f:
 4    reader = csv.reader(f, delimiter=',')
 5    header = next(reader)  # nextメソッドを使用して、ヘッダーの情報を読み込む
 6    id_header = header[0]
 7    name_header = header[1]
 8    age_header = header[2]
 9    prefecture_header = header[3]
10
11    persons_dic = {}
12    for row in reader:
13        id = int(row[0])
14        name = row[1]
15        age = row[2]
16        prefecture = row[3]
17        p_dic = {}
18        p_dic[id_header] = id
19        p_dic[name_header] = name
20        p_dic[age_header] = age
21        p_dic[prefecture_header] = prefecture
22        persons_dic[id] = p_dic
23
24print("""対象者の情報
25ID      :{}
26姓      :{}
27年齢    :{}
28都道府県:{}
29""".format(persons_dic[1][id_header], persons_dic[1][name_header],
30           persons_dic[1][age_header], persons_dic[1][prefecture_header]))
31# 対象者の情報
32# ID      :1
33# 姓      :牛島
34# 年齢    :36
35# 都道府県:大分県

csvの書き込み

with文とcsv.writerを使用してデータを書き込みます。
open関数のnewline=”は必ず設定してください。
設定しないと、書き込み時に余計な改行が書き込まれます。

1import csv
2
3write_data = [['ID', '姓', '年齢', '都道府県'],
4              [1, '牛島', 36, '大分県'],
5              [2, '大滝', 24, '石川県']]
6with open('write_test.csv', 'w', encoding='utf-8', newline='') as f:
7    writer = csv.writer(f)
8    writer.writerows(write_data)

コードを実行するとwrite_test.csvが作成されます。

1ID,姓,年齢,都道府県
21,牛島,36,大分県
32,大滝,24,石川県

またはwith文とcsv.DictWriteを使用してdict形式のデータを読み込みます。

1import csv
2
3header = ['ID', '姓', '年齢', '都道府県']
4write_data_dic = [{'ID': 1, '姓': '牛島', '年齢': 36, '都道府県': '大分県'},
5                  {'ID': 2, '姓': '大滝', '年齢': 24, '都道府県': '石川県'}]
6with open('write_test.csv', 'w', encoding='utf-8', newline='') as f:
7    writer = csv.DictWriter(f, fieldnames=header)
8    writer.writeheader()
9    writer.writerows(write_data_dic)
1ID,姓,年齢,都道府県
21,牛島,36,大分県
32,大滝,24,石川県

既に存在するcsvファイルにデータを追記したいときはwith openのパラメータを’a’にします。

 1import csv
 2
 3# writerを使用
 4append_data = [[3, '金丸', 58, '福岡県']]
 5with open('write_test.csv', 'a', encoding='utf-8', newline='') as f:
 6    writer = csv.writer(f)
 7    writer.writerows(append_data)
 8
 9
10# 追記 DictWriterを使用
11header = ['ID', '姓', '年齢', '都道府県']
12write_data_dic = [{'ID': 3, '姓': '金丸', '年齢': 58, '都道府県': '福岡県'}]
13with open('write_test.csv', 'a', encoding='utf-8', newline='') as f:
14    writer = csv.DictWriter(f, fieldnames=header)
15    writer.writerows(write_data_dic)

データを追記したcsvの内容は以下になります。

1ID,姓,年齢,都道府県
21,牛島,36,大分県
32,大滝,24,石川県
43,金丸,58,福岡県

ダミーデータの作成

ダミーデータは下記のサイトで作成しました。

https://webbibouroku.com/Blog/Article/test-data-generator

関連ページ