Pythonにはcsvを扱うための標準ライブラリがあり、利用すればcsvファイルの読み込み、書き込みの処理を行うことができます。
使用するダミーデータは以下になります。
名前はtestdata.csvで文字コードはutf-8です。
ID,姓,年齢,都道府県
1,牛島,36,大分県
2,大滝,24,石川県
3,金丸,58,福岡県
4,伏見,25,岡山県
5,稲村,13,石川県
6,脇本,23,千葉県
7,赤井,62,広島県
8,野尻,37,福島県
9,長嶋,35,広島県
10,成沢,58,福島県
csvモジュールの使用方法 #
csvの読み込み #
with文とcsv.readerを使用してcsvファイルを読み込みます。
import csv
with open('testdata.csv', encoding='utf-8', newline='') as f:
reader = csv.reader(f)
for row in reader:
print(row) # ['ID', '姓', '年齢', '都道府県']...
csvモジュールで改行処理を行うので、open関数のnewlineを’‘とします。
csv --- CSV ファイルの読み書き — Python 3.13.1 ドキュメント
docs.python.jp
またはcsv.DictReaderでデータをdictで読み込みます。
import csv
with open('testdata.csv', encoding='utf-8', newline='') as f:
reader = csv.DictReader(f)
for row in reader:
print(row['ID'], row['姓'], row['年齢'], row['都道府県']) # 1 牛島 36 大分県...
readerでcsvファイルのヘッダーを飛ばしたいときはreaderオブジェクト作成直後にnextメソッドを使用して ヘッダー行を飛ばします。
import csv
with open('testdata.csv', encoding='utf-8', newline='') as f:
reader = csv.reader(f, delimiter=',')
next(reader) # nextメソッドを使用して、ヘッダーを飛ばす
for row in reader:
print(row) # ['1', '牛島', '36', '大分県']...
csvの内容をDictionaryに格納するサンプルです。
import csv
with open('testdata.csv', encoding='utf-8', newline='') as f:
reader = csv.reader(f, delimiter=',')
header = next(reader) # nextメソッドを使用して、ヘッダーの情報を読み込む
id_header = header[0]
name_header = header[1]
age_header = header[2]
prefecture_header = header[3]
persons_dic = {}
for row in reader:
id = int(row[0])
name = row[1]
age = row[2]
prefecture = row[3]
p_dic = {}
p_dic[id_header] = id
p_dic[name_header] = name
p_dic[age_header] = age
p_dic[prefecture_header] = prefecture
persons_dic[id] = p_dic
print("""対象者の情報
ID :{}
姓 :{}
年齢 :{}
都道府県:{}
""".format(persons_dic[1][id_header], persons_dic[1][name_header],
persons_dic[1][age_header], persons_dic[1][prefecture_header]))
# 対象者の情報
# ID :1
# 姓 :牛島
# 年齢 :36
# 都道府県:大分県
csvの書き込み #
with文とcsv.writerを使用してデータを書き込みます。
open関数の1newline=”
は必ず設定してください。
設定しないと、書き込み時に余計な改行が書き込まれます。
import csv
write_data = [['ID', '姓', '年齢', '都道府県'],
[1, '牛島', 36, '大分県'],
[2, '大滝', 24, '石川県']]
with open('write_test.csv', 'w', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
writer.writerows(write_data)
コードを実行するとwrite_test.csvが作成されます。
ID,姓,年齢,都道府県
1,牛島,36,大分県
2,大滝,24,石川県
またはwith文とcsv.DictWriteを使用してdict形式のデータを読み込みます。
import csv
header = ['ID', '姓', '年齢', '都道府県']
write_data_dic = [{'ID': 1, '姓': '牛島', '年齢': 36, '都道府県': '大分県'},
{'ID': 2, '姓': '大滝', '年齢': 24, '都道府県': '石川県'}]
with open('write_test.csv', 'w', encoding='utf-8', newline='') as f:
writer = csv.DictWriter(f, fieldnames=header)
writer.writeheader()
writer.writerows(write_data_dic)
ID,姓,年齢,都道府県
1,牛島,36,大分県
2,大滝,24,石川県
既に存在するcsvファイルにデータを追記したいときはwith openのパラメータを’a’にします。
import csv
# writerを使用
append_data = [[3, '金丸', 58, '福岡県']]
with open('write_test.csv', 'a', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
writer.writerows(append_data)
# 追記 DictWriterを使用
header = ['ID', '姓', '年齢', '都道府県']
write_data_dic = [{'ID': 3, '姓': '金丸', '年齢': 58, '都道府県': '福岡県'}]
with open('write_test.csv', 'a', encoding='utf-8', newline='') as f:
writer = csv.DictWriter(f, fieldnames=header)
writer.writerows(write_data_dic)
データを追記したcsvの内容は以下になります。
ID,姓,年齢,都道府県
1,牛島,36,大分県
2,大滝,24,石川県
3,金丸,58,福岡県
ダミーデータの作成 #
ダミーデータは下記のサイトで作成しました。
テスト用ダミーデータの作成ツール │ Web備忘録