Python でCSVファイルの作成・読み書きを行う

csvモジュールの扱い方

Python を使って、csvファイルへの作成や読み書きを行ってみましょう。Pythonでcsvファイルを処理出来るとデータの取り込み、加工、解析、保存など様々な用途に活用できます。

他の Python の記事⼀覧は こちら

目次

Python を使ったcsvファイル操作

今回の記事では、csvファイルを操作するモジュールにcsvを使用します。
csvモジュールを使用して、メンバーリストの作成・編集を実施してみましょう。
以下のmemberlist.pyを作成して実行してみてください。

import csv  # CSVモジュールをインポート

# ◆◆◆csvファイル名、書き込むデータの準備◆◆◆
csv_file = "Members.csv" # CSVファイルの名前(パス)
members = [ # csvファイルに書き込むメンバー情報をリストとして定義
    {"名前": "高橋陽子", "年齢": 25, "性別": "女性"},
    {"名前": "伊藤次郎", "年齢": 40, "性別": "男性"},
    {"名前": "佐藤太郎", "性別": "男性", "年齢": 30},  # ここから項目の順番がバラバラ
    {"性別": "女性", "年齢": 28, "名前": "鈴木花子"},
    {"年齢": 35, "名前": "田中一郎", "性別": "男性"},
]

# ◆◆◆csvファイルを書き込みモードで開く◆◆◆
with open(csv_file, mode='w', newline='', encoding='utf-8') as file: #csvファイルをオープン(無ければ作成)
    writer = csv.DictWriter(file, fieldnames=["名前", "年齢", "性別"]) # fieldnamesでデータを書き込む際の列の順序と見出しを定義
    writer.writeheader()  # ヘッダー行を先頭に書き込む
    for writemember in members:  # 書き込むメンバー情報を1行ずつ取り出す
        writer.writerow(writemember)  # 1行ずつcsvファイルに書き込む
print(f"csvファイル '{csv_file}' を作成しました。") # ファイルが作成されたことを確認するためのメッセージ

# ◆◆◆csvファイルを読み込みモードで開く◆◆◆
with open(csv_file, mode='r', encoding='utf-8') as file:
    reader = csv.reader(file)  # csvファイルを読み込む準備
    for readmember in reader:  # csvファイルの各行を1行ずつ読み込む
        print(readmember)  # 読み込んだ行を表示

実行してみると、ターミナルに以下の内容が出力されます。

CSVファイル 'Members.csv' を作成しました。
['名前', '年齢', '性別']
['高橋陽子', '25', '女性']
['伊藤次郎', '40', '男性']
['佐藤太郎', '30', '男性']
['鈴木花子', '28', '女性']
['田中一郎', '35', '男性']

Members.csvを作成してその中にメンバー情報をヘッダーに沿って書き込んだのち、作成したcsvファイルを読み込んでprintでターミナルに表示しています。内容について順番に見ていきましょう。

書き込み用のデータを準備

import csv  # CSVモジュールをインポート

# ◆◆◆csvファイル名、書き込むデータの準備◆◆◆
csv_file = "Members.csv" # CSVファイルの名前(パス)
members = [ # CSVファイルに書き込むメンバー情報をリストとして定義
    {"名前": "高橋陽子", "年齢": 25, "性別": "女性"},
    {"名前": "伊藤次郎", "年齢": 40, "性別": "男性"},
    {"名前": "佐藤太郎", "性別": "男性", "年齢": 30},  # ここから項目の順番がバラバラ
    {"性別": "女性", "年齢": 28, "名前": "鈴木花子"},
    {"年齢": 35, "名前": "田中一郎", "性別": "男性"},
]

csvファイルを作成するにあたり、どんなデータを作るのか最初に定義します。
今回は作成するファイルの名前をMembers.csvと決め、変数membersに「名前、年齢、性別」を格納したリストを準備しました。
変数membersはそれぞれ辞書は同じキー(名前、年齢、性別)を持っていますが、順序はバラバラです。このまま単純に書き込んでしまうと順序のおかしいファイルが作成されてしまいます。その対策として、今回はcsv.DictWriterオブジェクトを使用して正しい順序でデータが書き込まれるようにします。

csvファイルをオープンし、データを書き込む

csvファイルのオープン

# ◆◆◆csvファイルを書き込みモードで開く◆◆◆
with open(csv_file, mode='w', newline='', encoding='utf-8') as file: #csvファイルをオープン(無ければ作成)

with文を使用し、Members.csvを開きます。open()で開く際、引数に追記することでファイル操作に関する設定を指定することが出来ます。今回は下記のような設定を指定しています。
・mode=’w’:書き込みモード(’w’)で開くよう指定しています。
・newline=’ ‘ : 改行コードの処理を指定しています。(余分な改行が挿入されるのを防いでいます。)
・encoding=’utf-8′ : UTF-8エンコーディングを使用してファイルを開くことを指定しています。

Members.csvを開く際、Members.csvが存在しないのであればこのタイミングで自動で作成されます。(指定モードに編集権がある状態を指定した場合のみ)今回は事前にファイル作成をしていないので、自動でMembers.csvが作成されます。

(with文についての説明は こちら を参照ください)

csvファイルにデータを書き込む

    writer = csv.DictWriter(file, fieldnames=["名前", "年齢", "性別"]) # fieldnamesでデータを書き込む際の列の順序と見出しを定義
    writer.writeheader()  # ヘッダー行を先頭に書き込む
    for writemember in members:  # 書き込むメンバー情報を1行ずつ取り出す
        writer.writerow(writemember)  # 1行ずつcsvファイルに書き込む
print(f"csvファイル '{csv_file}' を作成しました。") # ファイルが作成されたことを確認するためのメッセージ

csvファイルへの書き込みの為、csv.DictWriterオブジェクトを作成します。作成の際、fieldnames=[キー]でヘッダー行の列名を指定しています。このヘッダー情報とリストのキー情報を紐づける事により、リストの順序がバラバラでも正しい順序でデータが書き込まれます。
この時点ではまだヘッダーの定義を行っただけで、ファイルへの書き込みは行われていません。

書き込みについての設定が終わったので、いよいよ内容の書き込みを行います。
writer.writeheader()では、先ほどfieldnamesで設定したヘッダー行をファイルに書き込んでいます。書き込みを行わない場合、fieldnamesで設定したヘッダーはファイルに書き込まれず、列名がないファイルが出来上がります。

for文でmembersに格納したリストを1行づつ取り出し、writer.writerow()で取り出した内容を書き込んでいます。この書き込みの際、fieldnamesで定義したヘッダー情報とリストのキー情報を紐づけて正しい順序で書き込みを行います。

csvファイルの読み込み

# ◆◆◆csvファイルを読み込みモードで開く◆◆◆
with open(csv_file, mode='r', encoding='utf-8') as file:
    reader = csv.reader(file)  # csvファイルを読み込む準備
    for readmember in reader:  # csvファイルの各行を1行ずつ読み込む
        print(readmember)  # 読み込んだ行を表示

作成したMembers.csvを開いて、内容をターミナルに表示させます。


作成・書き込みを行った時同様、with文を使用してMembers.csvを開きます。今回の設定は下記の通りです。
・mode=’r’ : 読み込みモード(’r’)で開くよう指定しています。
・encoding=’utf-8′ : UTF-8エンコーディングを使用してファイルを開くことを指定しています。

Members.csvが開いけたら、ファイルを読み込む為にcsv.readerオブジェクトを作成します。今回は読み込みの為、細かい設定などはありません。
最後に、csv.readerで作成されたオブジェクトから、for文でcsvファイルの内容を1行づつ取り出しprint文でターミナルに表示しています。

csvファイルはテキスト形式であり人間が簡単に読み書きできるため、データの可読性が高く編集や確認が容易です。また、データ量が大きくなってもファイルサイズが比較的小さくなるため、大規模なデータセットの処理にも適しています。習得してデータ処理に生かしてください。

(Visited 33 times, 1 visits today)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次