2009年6月20日土曜日

Pythonでタブ区切りのファイルを扱う

ユーザーによってアップロードされたタブ区切りのファイル(TSV)をPythonで扱う必要があったのでちょっと調べてみました。
テスト環境はGoogle App Engine + Django

from StringIO import StringIO
import csv

def file_upload(request):
s = StringIO(request.FILES['file']['content'])
contents = csv.reader(s, delimiter='\t')
lines = []
for line in contents:
lines.append(line)

CSVは Comma Separated Valuesの略字ですので、原則はカンマ区切りで構成されたものです。
ですが、Pythonのcsvモジュールはオプションで区切り文字を指定できるので、タブ区切りでもこのモジュールを活用することが可能です。

csv.readerの第1引数は
イテレータプロトコルをサポートし、next メソッドが呼ばれた際に常に文字列を返すような任意のオブジェクトにすることができます
とのことなので、アップロードされたファイルを設定したStringIOインスタンスを指定します。

delimiter引数が区切り文字です。
タブ区切りを扱いたいので、ここでは \t を指定しています。

こちらのエントリを参考にさせていただきました。
http://d.hatena.ne.jp/gonsuzuki/20090401/1238562547

csvモジュールのリファレンス
http://www.python.jp/doc/release/lib/module-csv.html

0 件のコメント: