Pythonのcsvモジュールの使い方
- 作成日: 2021-01-26
- 更新日: 2023-12-24
- カテゴリ: Python
Ptyhonのcsvモジュールの使い方
プログラミング言語のPythonにはさまざまな標準ライブラリがあります。
その中の1つに「csv(シーエスブイ)」というライブラリがあります。
これはCSVファイルを解析するためのライブラリです。
このライブラリを使うとCSVファイルを読み込んだり書き込んだりすることが出来るようになります。
この記事ではこのcsv
モジュールの使い方を解説します。
具体的には↓を見ていきます。
- CSVとは?
- CSVファイルの読み込み
- CSVファイルの書き込み
CSVとは?
そもそもCSV(シーエスブイ)とはいったい何なのでしょうか?
CSVとはファイルの書式(フォーマット)のことです。
CSVは「Comma Separated Values」の頭文字を取ってそう呼ばれています。
直訳すると「カンマで区切られた値」という意味になります。
その意味の通りで、CSVで記述されたファイルと言うのは↓のような内容になります。
Taro,170,60
Hanako,150,40
Bob,180,80
Mary,160,50
↑のようにCSVは、値をカンマ(,
)で区切って並べます。
そして1行が1レコードの単位になります。
つまり↑のファイルの場合、レコード数は4件になるわけです。
CSVは簡易的なデータフォーマットで、様々なプログラムで利用されています。
その仕様はRFCで決められており、この仕様に沿ったパーサーが今回紹介するcsv
です。
CSVを利用している代表的なソフトウェアの1つがマイクロソフト社のExcel(エクセル)です。
Excelは標準でCSVファイルのインポート/エクスポートに対応しており、CSVファイルを通じて他のソフトウェアとデータを共有することが出来ます。
CSVは初心者が最初に取り組むべきデータフォーマットとしても適しています。
構造が簡単で、直観的なためです。
CSVファイルの読み込み
csv
を使ってCSVファイルを読み込みます。
今回読み込むファイルのmy.csv
の内容は↓のようになっています。
Taro,170,60
Hanako,150,40
Bob,180,80
Mary,160,50
↓がコードです。
import csv
# CSVファイルを開く
with open('my.csv', 'r', encoding='utf-8') as fin:
# CSVファイルからCSVリーダーを作成
reader = csv.reader(fin)
# 1行ずつ読み込む
for row in reader:
print(row)
↑のコードの出力結果は↓のようになります。
['Taro', '170', '60']
['Hanako', '150', '40']
['Bob', '180', '80']
['Mary', '160', '50']
csv
でCSVファイルを読み込む手順は↓のようになります。
- open()で読み込み用ファイルを開く
- csv.reader()でファイルをリーダーに変換
- リーダーから一行ずつレコードを読み込む
まず最初にcsv
を使うには↓のようにcsv
をインポートする必要があります。
import csv
それから↓のようにopen()
でファイルを開きます。
with open('my.csv', 'r', encoding='utf-8') as fin:
...
open()
の第1引数にファイル名、それから第2引数にファイルのオープンモードを指定します。
オープンモードは読み込みを行うのでr
になります。
それからencoding
キーワード引数にutf-8
を指定しておきます。
これはWindows環境でもUTF-8
のファイルを読み込めるようにするために指定しています。
ファイルを開いたら、そのファイルを↓のようにCSVリーダーに変換します。
reader = csv.reader(fin)
csv.reader()
の第1引数にファイルオブジェクトを渡します。
するとcsv.reader()
は返り値でリーダーを返します。
レコードの読み込みなどの操作はこのリーダーに対して行っていきます。
リーダーを作成したらそのリーダーをfor
文で回し、行を取得していきます。
for row in reader:
print(row)
取得した行はリストになっています。
このリストにはレコードのフィールドが格納されています。
よってrow
は↓のように参照することも可能です。
print(row[0])
print(row[1])
print(row[2])
CSVファイルの書き込み
csv
でCSVファイルを書き込みます。
コードは↓です。
import csv
# CSVファイルを開く
with open('out.csv', 'w', encoding='utf-8') as fout:
# ライターを作成
writer = csv.writer(fout, lineterminator='\n')
# 行を書き込み
writer.writerow(['Takoyaki', '300yen', '100g'])
writer.writerow(['Taiyaki', '200yen', '70g'])
writer.writerow(['Ramen', '500yen', '300g'])
↑のコードを実行すると↓のようなCSVファイル(out.csv
)が作成されます。
Takoyaki,300yen,100g
Taiyaki,200yen,70g
Ramen,500yen,300g
csv
でCSVファイルを書き込む場合の手順は↓のようになります。
- open()で書き込み用ファイルを開く
- csv.writer()でファイルからライターを作成
- ライターから行をファイルに書き込む
まず最初にファイルを↓のように書き込み用で開きます。
with open('out.csv', 'w', encoding='utf-8', newline='\n') as fout:
...
open()
の第1引数に作成するファイル名、第2引数オープンモードを指定します。
オープンモードをw
に指定すると、open()
は書き込み用のファイルを空の状態にして開きます。
大切なデータが入っているファイルなどはこのモードで開かないようにしてください。中身が破壊されます。
Windows用にencoding
にutf-8
を指定しておきます。
newline
引数に「\n
」を指定しておきます。これはファイルの改行の指定です。今回作成するCSVファイルは改行をLF
にします。これはUNIXなどのシステムで一般的なフォーマットです。そのためLF
を表す\n
を指定しておきます。
ファイルを開いたらcsv.writer()
にファイルオブジェクトを渡して↓のようにライターを作成します。
writer = csv.writer(fout, lineterminator='\n')
csv.writer()
の第1引数にファイルオブジェクトを渡します。
lineterminator
引数に「\n
」を指定しておきます。
これは行の改行の指定です。デフォルトでは「\r\n
」が指定されます。今回作成するCSVファイルの改行はLF
なので\n
を指定しておきます。
ライターを作成したらライターを使ってファイルにレコードを書き込んでいきます。
writer.writerow(['Takoyaki', '300yen', '100g'])
writer.writerow(['Taiyaki', '200yen', '70g'])
writer.writerow(['Ramen', '500yen', '300g'])
writer.writerow()
にリストを渡すと、writerow()
はそのリストをCSVフォーマットに変換してファイルに書き込みます。
おわりに
今回はcsv
の使い方を解説しました。
csv
モジュールはこの他にもいろいろな機能があります。
詳しくは↑を参照してみてください。