このサイトについて

大人 meets プログラミング,Pythonで人生をハックしよう。
8月12日(日),プログラミングとAIのリテラシーをサックリと学ぶ講座を開発します。 (主催:角川アスキー総合研究所)

Pythonicな文字列パーサ parse

Pythonicな文字列パーサ parse

parseはPython用の文字列パーサライブラリ。「pip install parse」でインストールするだけで使える。

プレースホルダ「{}」を使ってパターンを与えると,任意の文字列の中から文字列を切り出すことができる。githubにあるサンプルコードを見てみよう。

>>> from parse import *
>>> r = parse("It's {}, I love it!", "It's spam, I love it!")
>>> print r
<Result ('spam',) {}> >>> r[0]
'spam'
>>> age = search('Age: {:d}\n', 'Name: Rufus\nAge: 42\nColor: red\n')
>>> age
<Result (42,) {}>
>>> age[0]
42
>>> type(age[0])
<class 'int'>

ここまで読んで鋭い人なら分かったと思うが,parseはPythonの文字列メソッドformat()と真逆の動きをする。formar()はテンプレートに文字列を埋め込むが,parseは文字列からプレースホルダの位置にある文字列を取り出す。取り出したオブジェクトはタイプ指定をすればintやfloatになるのも迷いがなくてよい。

他にも日付や時刻などよく使われる文字列をパースしてdatetimeオブジェクトに変換することなどもできる。

>>> parse('Meet at {:tg}', 'Meet at 1/2/2011 11:00 PM')
<Result (datetime.datetime(2011, 2, 1, 23, 0),) {}> 

Python 2/3両方で動くのも魅力的だ。パターンマッチもしてくれるので,文字列のパースに正規表現を使うような場面の多くを置き換えてくれるはずだ。プレースホルダの仕様はformat()に準じているので,新しく覚える必要がない。parseは清く正しいPythonicな文字列パーサだ。

2012-01-12 23:50