「PythonでCSVファイルを読み書きする方法」の版間の差分
提供: Python入門
(ページの作成:「PythonでCSVファイルを簡単に読み書きすることができます。普通にファイルをオープンして、splitで頑張る方法もありますが、力...」) |
(相違点なし)
|
2015年2月28日 (土) 19:15時点における版
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