ユーニックス総合研究所

  • home
  • archives
  • python-csv

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ファイルを読み込む手順は↓のようになります。

  1. open()で読み込み用ファイルを開く
  2. csv.reader()でファイルをリーダーに変換
  3. リーダーから一行ずつレコードを読み込む

まず最初に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ファイルを書き込む場合の手順は↓のようになります。

  1. open()で書き込み用ファイルを開く
  2. csv.writer()でファイルからライターを作成
  3. ライターから行をファイルに書き込む

まず最初にファイルを↓のように書き込み用で開きます。

with open('out.csv', 'w', encoding='utf-8', newline='\n') as fout:  
    ...  

open()の第1引数に作成するファイル名、第2引数オープンモードを指定します。
オープンモードをwに指定すると、open()は書き込み用のファイルを空の状態にして開きます。
大切なデータが入っているファイルなどはこのモードで開かないようにしてください。中身が破壊されます。
Windows用にencodingutf-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モジュールはこの他にもいろいろな機能があります。

詳しくは↑を参照してみてください。