メインコンテンツへスキップ
【Python】csvライブラリの活用

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

·4 分
Programming Python
かずさプログラマー
著者
かずさプログラマー
業務の作業自動化を行っています。Go、VBA、Pythonを主に使用しています。過去にはC#、VB.Net、JavaScriptも使用していました。
目次

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.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,福岡県

ダミーデータの作成
#

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

関連記事

【Python】os.walkでフォルダを再帰的に探索する
·2 分
Programming Python
【Python】if element not in Listと書きましょう
·2 分
Programming Python
【Python】Dictionary(辞書)から値を削除するときdelとpopメソッドどっちを使う?
·1 分
Programming Python