【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,福岡県
ダミーデータの作成
ダミーデータは下記のサイトで作成しました。
関連ページ
- 【Python】os.walkでフォルダを再帰的に探索する
- 【Python】’if element not in List’と書きましょう
- 【Python】Dictionary(辞書)から値を削除するときdelとpopメソッドどっちを使う?