PythonでCSVファイルを入力・出力はできる?|CSVモジュールを使った方法を解説!

Pythonを学び始めたばかりの人がつまずきやすい、CSVファイルの操作。しかし、一度操作に慣れてしまえば、データの読み書きや外部ファイルのデータ活用が可能になり、活用の幅がさらに広がります。

今回は、Python初心者の方にも分かりやすくCSVファイルの説明や、CSVモジュールを利用したCSVファイルの入力(読み込み方)出力(書き込み方)を解説します。

CSVファイルとは

CSVとは、“comma-separated values”の略で、複数のデータをコンマ「,」で区切って保存するファイル形式のことを指します。

Pythonでは、CSVファイルの読み込み・書き込みできる「csvモジュール」が標準ライブラリとして備わっているため、CSVファイルの操作を簡単に行えるようになっています。

ファイルの拡張子には「.csv」が使用されており、アプリケーション間のデータ移行・やり取りに使用されています。

CSVファイルの形式

CSVファイルの表示は「文字とコンマ(,)のみ」で構成されており、文字間はコンマ(,)で区切られています。このファイル形式は、メモ帳ソフト・Excel・Access・Google Sheetなどで開くことができる、互換性の高い形式のひとつです。

ただし、OS次第ではCSVファイルをExcelで開くと「文字化け」を起こすことがあります。ファイル形式が異なると、そのファイル形式に対応していないアプリケーションでのファイルの読み込みができないため注意しましょう。

CSVファイルの使用場面

CSVファイルは、私たちの生活やビジネスなどにおいてさまざまな場面で使われています。

たとえば、ECサイトの売り上げデータを会計ソフトに一括取り込みする際や、顧客管理システムへの顧客情報データ移行する際にCSVファイルが用いられることが一般的です。また、データをExcelに集計してグラフ化するときなどにも活用されています。

身近な利用場面としては、交通系電子マネーや、クレジットカードの利用明細を出力するときなども挙げられます。

CSVファイルを用いることで、ソフトウェアやアプリケーションの互換性がなくデータ移行ができない場合でも、共通のCSVファイルでデータのエクスポート・インポートが可能になります。Pythonであれば、CSVファイルへのデータ入力・出力を効率的に行うことが可能です。

Python上でCSVファイルを使用しているサービス例

Pythonは、大容量のデータベースを読みやすくして整理・計算することや、Excelを開かずに必要なデータのみを読み込むことなど、データ処理を得意とするプログラム言語です。

このようなPythonの強みを生かし、CSVファイルを使用しているサービスには以下があります。

▼PythonによるCSVファイルを利用したサービス

  • Pepper 
  • YouTube 
  • Dropbox 
  • Reddit 
  • Instagram 
  • BitTorrent 
  • Bender
  • Anki

かの有名なサービスも、Pythonを用いてCSVファイルを活用しています。このことからも、Pythonがいかに操作性に優れているか分かります。

Pythonを活用している職種

Pythonを用いてCSVファイルのデータ抽出・分析を行うことが多いのが「Webマーケティング」の分野です。主に、以下のような職種で活用されています。

▼Pythonが活用されている職種

  • 機械学習のサービス開発者である「AI(人工知能)エンジニア」
  • Webサービスのシステム開発などに携わる「Webアプリケーションエンジニア」
  • Webサービスから得た情報を分析する「データサイエンティスト」
  • スクレイピングや画像分析などの情報分析にかかわる「Webマーケティング」

このように、デジタル機器やWebサービスから得られる膨大なデータを活用するために、CSVファイルが活用されています。上記の職種だけでなく、多くのデータを扱う際に、PythonによるCSVの操作は欠かせないスキルとなるでしょう。

CSVモジュールを使用する準備

Pythonには、CSVによるファイル読み込み・書き込みを行うための「CSVモジュール」が標準ライブラリ内にあるため、追加インストールの必要はありません。PythonのCSVモジュールを使えば、CSVファイルの読み書きを簡単に行うことができます。

ベーシックなCSVファイルの入力(読み込み方)

Python上でCSVファイルのデータを使用する際には、事前にPythonのライブラリ内からCSVモジュールをインポートしておかなければなりません。

CSVモジュールのインポートには、以下のコードを使用します。

▼CSVモジュールをインポートするコード

import csv

CSVファイルを読み込む

それでは実際に、PythonでCSVファイルを読み込みましょう。

「open関数」と呼ばれるPythonの関数を使用して、CSVファイルの読み書き・新規作成・保存など操作を行います。

入力には、CSVモジュールの「csv.readerクラス」を使います。open関数を用いて’r’を指定すれば「f」と定義づけたファイルを開くことができます。

次に、open( )で開いたファイルオブジェクト「f」をfor文で反復処理をかければ、データが1行ずつのリスト形式になります。

▼使用するsample.csvのデータ例

one, two, three, four, five Japan, USA, UK, China, Germany Swimming, Judo, Karate, Soccer, Skateboarding

▼サンプルコード例

import csv 
with open ( ‘sample.csv’ , ’r’ ) 
as f : reader = csv. reader ( f ) 
for line in reader: 
print ( line )

▼実行結果

[ ‘one’, ‘two’, ‘three’, ‘four’, ‘five’] 
[ ‘Japan’, ‘ USA’, ‘UK’, ‘China’, ‘Germany’] 
[ 'Swimming’ , ‘Judo’, ‘Karate’, ‘Soccer’, ‘Skateboarding’]

上記のコードを実行すると、1行ずつデータをリスト化することができます。

TXTファイルを使用する場合

「csv.readerクラス」を使用するとコンマ(,)は区切り文字として認識されます。これはCSVファイルの使用することがデフォルトとされているためです。しかし、場合によっては以下のような「TXTファイル」を使用したい場面もあるでしょう。

使用するsample.txtのデータ例

one two  three four  five 
Japan  USA  UK  China  Germany 
Swimming  Judo Karate Soccer  Skateboarding

上記のケースでは、区切りとして「,」ではなく半角スペースが使用されています。CSVモジュールを用いることで、このようなTXTファイルのデータ処理の実行が可能です。

まずは、CSVファイルと同様にTXTファイルをopen関数で「f」と定義づけて取り込みます。次に、「csv. reader()」内に第2引数として「delimiter= ‘ ’」を入力し、区切り文字として「 ‘ ’」内に半角スペースを指定します。

これにより「,」以外で区切られたデータも処理できるようになります。また、1行ずつのリストではなく「row for row in reader」で二次元リストを作成します。

▼サンプルコード例

import csv
with open ( 'sample.txt’ , ’r’ ) as f :
reader = csv. reader ( f, delimiter= ' ' )
line=[ row for row in reader ]
print ( line )

▼実行結果

[ [ ‘one’ ,  ‘two’ ,  ‘three’ , ‘four’ ,  ‘five’] , [ ‘Japan’ ,  ‘ USA’ ,  ‘UK’ , ‘China’ ,  ‘Germany’], [ Swimming’ ,  ‘Judo’ ,  ‘Karate’ , ‘Soccer’ ,  ‘Skateboarding’] ]

要素を指定してファイル情報を取得する

「row for row in reader」で二次元リストを作成した後は、CSVファイル内の要素を指定してファイル情報を読み込んでみましょう。列と行の数え方は「0,1,2・・」にように「0」から始まることに注意が必要です。

まずは、1行目のデータだけを読み込みます。

使用するsample.csvのデータ例

one, two, three, four, five Japan, USA, UK, China, Germany Swimming, Judo, Karate, Soccer, Skateboarding

▼サンプルコード例

import csv 
with open ( ‘sample.csv’ , ’r’ ) as f : 
reader = csv. reader ( f ) 
line=[ row for row in reader ] 
print ( line[ 2 ] )

▼実行結果

[ ‘Swimming’ , ‘Judo’ , ‘Karate’ , ‘Soccer’ , ‘Skateboarding’ ]

次に、例として2行目の5列目を指定します。

▼サンプルコード例

print ( line [ 1 ] [ 4 ])

▼実行結果

‘Germany’

このようにして、1行ずつファイルの中身を読み込むことができます。

辞書入力を実行する場合

CSVファイルのデータを行ごとに辞書として読み込む場合は「csv.DictReader」を使います。基本的なcsv.readerクラスと同じような動作ですが、各行のデータを辞書に直接書き込むことができます。

使用するsampleolympic.csvのデータ例

year , city , country 2020 ,Tokyo , Japan 2016 , Rio de Janeiro , Brasil 2012 , London , the United Kingdom

▼サンプルコード例

import csv   
with open ( ‘sampleolympic.csv’ , ’r’ ) as csv_file : 
csv_reader = csv.DictReader ( csv_file ) 
line_count = 0 
for row in csv_reader : 
if line_count = =0 
print ( f ‘ Column names are {‘ , ‘ . join ( row ) } ‘ ))  
line _ count += 1 
print ( f ’ \t  The { row [ ‘year’ ] }  Olympic Games were held in { row [ ‘city’ ] } , { row [ ‘country’ ] } . ‘ )  
line _ count += 1 
print ( f ‘ Processed { line _ count } lines . ‘ )

▼実行結果

The 2020 Olympic Games were held in Tokyo , Japan. 
The 2016 Olympic Games were held in Rio de Janeiro , Brasil. 
The 2012 Olympic Games were held in London , the United Kingdom.

CSVモジュールの実行中によくあるエラー

CSVモジュールを使用しているとき、よくあるエラーとして以下のような例が挙げられます。

▼エラーコードの例

import csv   
File "C:\python\scripts\csv.py"   
AttributeError: module 'csv' has no attribute 'reader'

このようなエラー表示の原因は、スクリプト内のファイル名「csv.py」にあります。このままでは、CSVライブラリを読み込むことができません。たとえば「csv3.py」のようにファイル名を変更して、再び実行してましょう。

Python上でCSVファイルの文字化けを回避する方法

Pythonで読み込みができるようになった時に、直面するトラブルが「日本語を用いたデータの文字化け」です。日本語で構成されたファイルを読み書きする際には、CSVファイルの文字コードを変換させなければなりません。

コンピュータ上の文字や記号は「文字コード」で個別に符号が割り当てられています。世界的に普及している文字コードは「UTF-8」です。しかし、UTF-8のままでは、日本語特有の「ひらがな・カタカナ・漢字」が混在している文字は表記できないため「文字化け」が起きてしまいます。

このような文字化けを解消するには、CSVファイルの文字コードを変換する必要がります。今回は、「UTF-8」を「Shift_JIS」へと変換し日本語を表記する方法を解説します。

▼サンプルコード例

import csv   

with open('utf8.csv', 'w', newline='', encoding='utf8') as f:
    writer = csv.writer(f)
    writer.writerow(['商品名','価格'])
    writer.writerow(['鉛筆','100'])
    writer.writerow(['シャープペンシル','200'])

with open('utf8.csv', encoding='utf8') as f_in:     
    with open('sjis.csv', 'w', encoding='cp932') as f_out:
        f_out.write(f_in.read())

「encoding」で使用するエンコードを指定することで、utf8.csvファイルを読み込み、「sjis.csv」を使用してファイルに書き込むことができました。これで、日本語の文字化けを解消することができます。

ベーシックなCSVファイルの出力(書き込み方)

CSVファイルの出力には、CSVモジュールの「csv.writerクラス」を使います。csv.readerクラスと同じくopen関数を用いていますが、出力の際は「’w’」と指定します。

CSVファイルを出力する

CSVファイルに書き込むときは、open関数「with open()」の第2引数に「’w’」を指定します。今回は例として、 “apple, tomato”を「writer . writerow ( words )」のメソッドを使用し、CSVファイルに1行で書き込んでみます。

▼サンプルコード例

import csv 

word = “apple, tomato” 
words = word . split ( ‘,’ ) 

with open (‘sample.csv’ , ‘w’) as f :    
writer = csv . writer ( f ) 
writer . writerow ( words )

▼実行結果

apple, tomato

CSVファイルにデータを追加する場合

CSVファイルにデータを追記するには、「with open()」の関数内の第2引数に「‘a’ 」を指定する必要があります。「‘a’ 」は英単語の「add=加える」の頭文字を指します。

今回は ‘icecream’ という単語を追記します。追記したデータはファイルの末尾に追加されますが、ファイルが存在しないケースでは新たにファイルが作成される仕組みとなっています。 ‘icecream’ の部分に、追記したいデータを書き込むことができます。

▼サンプルコード例

import csv   

with open ( ‘sample . csv’ , ‘a’ ) as f :  
writer = csv . writer ( f ) 
writer . writerow ( [ ‘icecream’ } )

TSVファイルで書き出す場合

CSVファイルは「コンマ区切り」ですが、TSVファイルと呼ばれる「タブ区切り」のファイルも存在します。データ管理をTSVファイル形式に統一している場合は、実行結果をTSVファイルで書き出す必要があります。

その場合は「csv . writer ( f )」の第2引数として「delimiter=’\t’」を加えましょう。実行結果でTSVファイル形式として書き出すことが可能です。

▼サンプルコード例

import csv   

with open (’sample . tsv’ , ’w’) as f :  
    writer = csv . writer ( f , delimiter=’\t’)  
    writer.writerow ( line )   

with open (’example . tsv’) as f :   
    print ( f . read( ) )

▼実行結果

‘one’ ‘two’  ‘three’   ‘four’  ‘five’  ‘Japan’  ‘ USA’   ‘UK’ ‘China’  ‘Germany’ Swimming’  ‘Judo’  ‘Karate’  ‘Soccer’   ‘Skateboarding’

辞書に追記する場合

CSVファイルのデータを辞書として各行に書き込む場合は「csv.DictWriter」を使います。CSVファイルを読み込むときと同様、CSVファイルに新しいデータを追記しましょう。

今回の例では、「2008 , Beijing , China」と「2004 , Athens , Greece」のデータを追記し、辞書に直接書き込むことができました。

使用するsampleolympic.csvのデータ例

year , city , country 2020 ,Tokyo , Japan 2016 , Rio de Janeiro , Brasil 2012 , London , the United Kingdom

▼サンプルコード例

import csv

with open ( ‘sampleolympic.csv’ , ‘w’ ) as csv _ file :
fieldnames = [ ‘year’ , ‘city ’ , ‘country’ ] 
writer = csv . DictWriter ( csv _ file , fieldnames = fieldnames )

writer . writeheader ( )
writer . writerow ( { ‘year’ : ‘2008’ , ‘city’ : ‘Beijing’ , ‘country’ : ‘China‘ } )
writer . writerow ( { ‘year’ : ‘2004’, ‘city’ : ‘Athens’ , ‘country’ : ‘Greece’ } )

▼実行結果

year , city , country 2020 , Tokyo , Japan 2016 , Rio de Janeiro , Brasil 2012 , London , the United Kingdom 2008 , Beijing , China 2004 , Athens , Greece

PythonでCSVファイル操作の効率化

今回は、CSVファイルを読み込む「csv.readerクラス」、書き込む「csv.writerクラス」といった基本の操作から、辞書機能を含んだコードについて解説しました。

CSVファイルを使用することで、互換性のないソフトウェアやアプリケーション間でのデータ移行が可能になります。PythonのCSVモジュールを用いれば、CSVファイルの読み込み・書き込みをスムーズに実行できるため、CSV操作の効率化を図れます。

AIやIoTなどによるビッグデータの活用が進むなか、システムやソフトウェア、アプリケーション間でのデータやり取りを行うために、CSVファイルの必要性はさらに高まると考えられます。Pythonで適切かつスピーディにデータ処理できるスキルは、さまざまな分野で重宝されることでしょう。

CSVの操作は独学でも学習可能ですが、短期間で効率的にスキルを習得したい方は、プログラミングスクールを検討することもおすすめです。

Pythonが学べる学習比較サイトはこちら▶︎▶▶︎