Pythonで表データを扱うライブラリ「tablib」を試す

仕事してるとテストデータを作ったり、またはシステムのデータをダウンロードさせたりとかで、結構csvやxls形式を使います
そんなときに便利そうなライブラリがあったのでちょっと試して見ました

tablib
https://github.com/kennethreitz/tablib

document
http://docs.python-tablib.org/en/latest/index.html

インストール

pip install tablib

使い方

新しくデータを作成する

# ヘッダ
import tablib

headers = ('名字', '名前')

# データ
data = [('東方','仗助'),
        ('虹村', '億泰')]


# 表データの作成
data = tablib.Dataset(*data, headers=headers)

# 行を追加
data.append(('広瀬', '康一'))

# 列が足りないとtablib.core.InvalidDimensionsが発生
# data.append(('空条'))

# 列を追加
data.append_col((16, 16, 16), header='年齢')

# 行数が足りないとtablib.core.InvalidDimensionsが発生
# data.append_col((16, 16), header='年齢')

# ヘッダを指定しないと、tablib.core.HeadersNeededが発生
# data.append_col((16, 16, 16))

# 行を取得
print data[0] # => ('\xe6\x9d\xb1\xe6\x96\xb9', '\xe4\xbb\x97\xe5\x8a\xa9', 16)

# 列を取得
print data['名字'] # => ['\xe6\x9d\xb1\xe6\x96\xb9', '\xe8\x99\xb9\xe6\x9d\x91', '\xe5\xba\x83\xe7\x80\xac']


# 行を削除
del data[0]


データを出力する

# json
print data.json

[{"\u540d\u5b57": "\u6771\u65b9", "\u540d\u524d": "\u4ed7\u52a9", "\u5e74\u9f62": 16}, {"\u540d\u5b57": "\u8679\u6751", "\u540d\u524d": "\u5104\u6cf0", "\u5e74\u9f62": 16}, {"\u540d\u5b57": "\u5e83\u702c", "\u540d\u524d": "\u5eb7\u4e00", "\u5e74\u9f62": 16}]

# yaml
print data.yaml

- {!!python/str "\u540D\u524D": !!python/str "\u4ED7\u52A9", !!python/str "\u540D\u5B57": !!python/str "\u6771\u65B9",
  !!python/str "\u5E74\u9F62": 16}
- {!!python/str "\u540D\u524D": !!python/str "\u5104\u6CF0", !!python/str "\u540D\u5B57": !!python/str "\u8679\u6751",
  !!python/str "\u5E74\u9F62": 16}
- {!!python/str "\u540D\u524D": !!python/str "\u5EB7\u4E00", !!python/str "\u540D\u5B57": !!python/str "\u5E83\u702C",
  !!python/str "\u5E74\u9F62": 16}

# csv
print data.csv

名字,名前,年齢
東方,仗助,16
虹村,億泰,16
広瀬,康一,16

# html
print data.html

<table>
<thead>
<tr><th>名字</th>
<th>名前</th>
<th>年齢</th></tr>
</thead>
<tr><td>東方</td>
<td>仗助</td>
<td>16</td></tr>
<tr><td>虹村</td>
<td>億泰</td>
<td>16</td></tr>
<tr><td>広瀬</td>
<td>康一</td>
<td>16</td></tr>
</table>

# excel
open('data.xls', 'wb').write(data.xls)

個人的な感想

いろんなフォーマットに変換できるんで、ツールとして知っておくと、わりと活躍の場がある気がします。
またExcelをサポートしてるってのがうれしいです。
エンジニアは結構Excel嫌いな人が多い気がするんですが、非エンジニアのスタッフの要求でデータをExcelで出してくれってことは、結構あったので。