2013/05/24

ライブラリ:xlrd

Pythonの「xlrd」というライブラリについてご紹介します。
import xlrd

「xlrd」は、Excel(xls)のデータをPythonで読むためのライブラリです。「xlrd」というのはおそらく「excel read」の省略形で、対となる「xlwt」というものも存在します。

xlrdでは、「Book→Sheet→Cell」という構造でエクセルデータを抽出します。

まずはBookから。

Excelファイルを開くには、関数open_workbook()を用います。CSVファイルを開く関数csv.reader()の場合は、ファイルオブジェクトを引数に取りましたが、xrdの場合はファイル名を直接受け取ります。
FILE = 'excelbook.xls'
book = xlrd.open_workbook(FILE)

open_workbook()でExcelファイルを開いたら(Bookオブジェクトを作成したら)、アトリビュートやメソッドを使ってその中身の情報にアクセスすることができます。
# 文字コード
print 'encoding:', book.encoding

# シートの枚数
print 'number of sheets:', book.nsheets

# シートの一覧(名前、データの入った行と列の数)
print 'sheets:'
for s in book.sheets():
    print '%s %sx%s' % (s.name, s.nrows, s.ncols)
シートの中身を取得するには、BookからSheetオブジェクトを取得した後、cell()メソッドを使います。
# Sheet1という名前のシートを取得
s = book.sheet_by_name('Sheet1')

print s.cell(1, 3)  # 指定した行・列のCellオブジェクトを取得
print s.cell_type(1, 3)  # セルのtypeを取得
print s.cell_value(1, 3)  # セルのvalueを取得
Sheetを取得するには、シートの名前で取得する方法sheet_by_name()とシートのインデックスで取得する方法sheet_by_index()とがあります。

各セルには「type」と「value」という情報が入っています。typeには文字列、数値といったセルのフォーマット情報が、valueにはデータの値が入っています。typeは
  • 1: 文字列
  • 2: 数値
  • 3: 日付
といった形であらかじめ番号が割り当てられているので、詳細は公式のドキュメントのセルについての部分でご確認いただくとよいかと思います。

行番号、列番号が0始まりの数字であることに注意が必要です。0始まりなので、たとえば、cell(1, 3)とした場合は、エクセル上で見ると、上から2行目、左から4列目のセルにアクセスしていることになります。

セル単位ではなく、行単位、列単位でデータを取得したい場合のために、row()、col()といった関数も用意されています。
s.row(0)  # 最初の行のセルをリストで取得
s.col(0)  # 最初の列のセルをリストで取得
s.col_values(0)  # 最初の行の値をリストで取得

以上です。


インストール
「setuptools」と「pip」が入っていれば、コマンドから「pip install xlrd」と打つとインストールできます。


参考
xlrd - pypi
Python Excel
xlrd extension - Lingfo

0 件のコメント: