【Python】PythonでのCSV操作
2024 年 8 月 30 日 by yamamotorはじめに
自身の参画案件において、PythonでCSVを扱うことがかなり多いので、
操作方法の基礎をまとめて記載します。
内容
今回のフォルダ構成は以下の通りです。
Book1.csvの内容は以下の通りです。
フォルダ「csvファイルをまとめて処理」内
CSVの読み込み
まず、csvライブラリを用いずにCSVファイルを読み込むプログラムを記載します。
———————————————————————————————————————————–
f = open(“Book1.csv”, ‘r’, encoding=”utf-8-sig”)
txt = f.read()
f.close()
print(“—–読み込んだcsvファイル—–“)
print(txt)
print(“—–split()で一次元リストに格納—–“)
ary1 = txt.split(“\n”)
print(ary1)
print(“—–更にsplit()し、二次元リストに格納—–“)
ary2 = []
for i in range(len(ary1)):
ary2.append(ary1[i].split(“,”))
print(ary2)
———————————————————————————————————————————-
上記を実行すると、以下の結果が得られます。
続いて、csvライブラリを利用してCSVファイルを読み込むプログラムを記載します。
———————————————————————————————————————————
import csv
f = open(“Book1.csv”, ‘r’, encoding=”UTF-8″)
cr = csv.reader(f)
txt = list(cr)
f.close()
for i in txt:
print(i)
———————————————————————————————————————————
open()関数は以下のような引数を受け取ることが可能です。
open(file, mode=’r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
また、「with」を利用することで、リソースの管理を自動化しコードを短縮することができます。
PythonでCSVファイルを読み込む際は、一般的にこのように記載します。
———————————————————————————————————————————
import csv
with open(“Book1.csv”, ‘r’, encoding=”UTF-8″) as f:
cr = csv.reader(f)
txt = list(cr)
for i in txt:
print(i)
———————————————————————————————————————————
上記を実行すると、以下の結果が得られます。
CSVへの書き込み
CSVファイルへの書き込みは一般的に以下のように記載します。
———————————————————————————————————————————
import csv
CSV_NAME = “Book_new.csv”
data = [
[“氏名1”, “生年月日1”, “TEL1”, “住所1”],
[“氏名2”, “生年月日2”, “TEL2”, “住所2”],
[“氏名3”, “生年月日3”, “TEL3”, “住所3”],
[“氏名4”, “生年月日4”, “TEL4”, “住所4”],
[“氏名5”, “生年月日5”, “TEL5”, “住所5”]
]
with open(CSV_NAME, ‘w’, encoding=”ANSI”, newline=”) as f:
cw = csv.writer(f)
cw.writerows(data)
print(CSV_NAME, “に書き込みました”)
———————————————————————————————————————————
上記を実行すると、Book_new.csvが作成され、以下の入力が行われます。
CSVの複数読み込み
同一フォルダ内の複数のCSVファイルを読み込む際には以下のように記載します。
———————————————————————————————————————————
import csv
import os
num_file = 0
num_people = 0
data = []
# ファイルを読み込み、データを追加する関数
def getdata(filename):
with open(filename, ‘r’, encoding=”utf-8″) as f:
cr = csv.reader(f)
txt = list(cr)
for i in range(1, len(txt)):
data.append(txt[i])
# 全てのCSVファイルに対し処理を行う
for f in os.listdir():
if f.endswith(“.csv”):
getdata(f)
num_file += 1
print(“処理したファイル”, f)
num_people = len(data)
print(num_file, “個のファイルを処理しました”)
print(num_people, “人分のデータを集計しました”)
# データの加工(整形)
print(“名前の全角スペースを半角に置換します”)
for i in range(num_people):
data[i][0] = data[i][0].replace(“ ”, ” “)
for i in data: # リストに格納したデータを出力
print(i)
———————————————————————————————————————————
複数のCSVファイルを読み込む場合にはosモジュールのlistdir関数を利用します。
今回はカレントディレクトリ内のファイル一覧を表示するために引数を指定していません。
上記を実行すると、以下の結果が得られます。
まとめ
CSVは多くの場面で使用されています。
CSVを自由に操作することで、多くのお客様のご要望にお応えすることが可能になるので、
引き続き勉強を進めていきます。