PythonでCSVファイルを読み書きする方法

提供: Python入門
移動: 案内検索
スポンサーリンク

PythonでCSVファイルを簡単に読み書きすることができます。普通にファイルをオープンして、splitで頑張る方法もありますが、力技に頼る必要はありません。

読み方

CSV
しーえすぶい

概要

PythonでCSVファイルを読み込む方法がいくつかあります。自分でパースする方法もありますが、プログラミングの目的は、たいていの場合、CSVファイルのパースのコードを書くためではありません。集計や統計などが目的であれば、CSVを簡単に扱うモジュールを使うのが望ましいでしょう。

CSVを扱うモジュール

  • csv
  • pandas

csvモジュールで1行目をスキップする方法

next を使用して、1行目をスキップできます。

import csv
 
csvfile = 'csv1.csv'
f = open(csvfile, "r")
reader = csv.reader(f)
header = next(reader)

単純なCSVファイルの読み込み

csv1.py

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# vim:fenc=utf-8
import csv
 
csvfile = 'csv1.csv'
f = open(csvfile, "r")
reader = csv.reader(f)
# header = next(reader)
 
for row in reader:
        print row
 
f.close()

csv1.csv

1,"foo"
2,"bar"
3,"hoge"

実行例

$ python csv1.py
['1', 'foo']
['2', 'bar']
['3', 'hoge']

単純なCSVファイルの読み込み 要素にアクセスする

csv2.py

rowは配列なので、添字を指定して、要素にアクセスできます。

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# vim:fenc=utf-8
import csv
 
csvfile = 'csv1.csv'
f = open(csvfile, "r")
reader = csv.reader(f)
# header = next(reader)
 
for row in reader:
        print row[1]
 
f.close()

実行例

$ python csv2.py
foo
bar
hoge

Unixパスワードファイルの読み込み /etc/passwd

Unix(Linux,FreeBSD)の/etc/passwdファイルは、CSVファイルではありません。/etc/passwdは、コロン区切りのファイルです。

ソースコード csv3_pw.py

FreeBSDの/etc/passwdは、2行目までがコメントのため、スキップしています。Ubuntuの場合は、 next の行を省略してください。 この例では、 /etc/passwd のユーザ名だけを表示します。

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# vim:fenc=utf-8
#
# Copyright © 2015 kaoru <kaoru@bsd>
import csv
 
csvfile = '/etc/passwd'
f = open(csvfile, "r")
reader = csv.reader(f, delimiter=':', quoting=csv.QUOTE_NONE)
header = next(reader) # FreeBSDは、必要。 Ubuntuでは不要
header = next(reader) # FreeBSDは、必要。 Ubuntuでは不要
 
for row in reader:
        print row[0]
 
f.close()

実行例

root
toor
daemon
operator
bin
tty
kmem
games
news
man
sshd
smmsp
mailnull
bind
unbound
proxy
_pflogd
_dhcp
uucp
pop
auditdistd
www
hast
nobody
user
git_daemon

CSVファイルを書き込む簡単な例

PythonでCSVファイルを書き出す例です。

ソースコード csv_writer1.py

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# vim:fenc=utf-8
#
# Copyright © 2015 kaoru <kaoru@bsd>
 
import csv
 
data = [[1, 'foo'], [2, 'bar'], [3, 'hoge']]
 
f = open('write1.csv', 'w')
writer = csv.writer(f)
writer.writerows(data)
f.close()

実行例

$ python csv_wr	ter1.py

以下の内容のファイルが作成されます。

1,foo
2,bar
3,hoge

pandasを使用したCSVの読み込み

pandas を使用すると非常に簡単になります。

モジュールのインストール

sudo pip install numpy
sudo pip install pandas

ソースコード pandas1.py

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# vim:fenc=utf-8
#
# Copyright © 2015 kaoru <kaoru@bsd>
import pandas
 
csv = pandas.read_csv('csv2.csv')
 
print csv

csv2.csv

"No","Name"
1,"foo"
2,"bar"
3,"hoge"

実行例

   No  Name
0   1   foo
1   2   bar
2   3  hoge

pandasを用いてCSVファイルのカラムを指定して表示する

ソースコード pandas2.py

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# vim:fenc=utf-8
#
# Copyright © 2015 kaoru <kaoru@bsd>
import pandas
 
csv = pandas.read_csv('csv2.csv')
 
print csv['Name']

実行例

0     foo
1     bar
2    hoge
Name: Name, dtype: object

関連項目



スポンサーリンク