2009年10月18日日曜日

スペース区切りの文字列をリスト化。文字列を検索し、そのインデックスを返す。

やりたいこと
(1)文字列(1行)に、特定の単語Aが入っているかを確認する。
(2)単語Aの場所を探す
(3)単語Aにスペース区切りで続く、単語B,C,D,E,Fを取得したい。

note: いくつかのWebによると、正規表現より文字列メソッド(string module)の方が、高速だそうです。

(1) 文字列に、単語が含まれているか? → 文字列メソッド find

find( sub[, start[, end]])
文字列中の領域 [start, end] に sub が含まれる場合、 その最小のインデクスを返します。

>>> moji = "xxx xxxx xxx@ 1 2 3 44 555 xxx xxx"
>>> moji.find("xxx@")
9

http://www.python.jp/doc/2.5/lib/string-methods.html

(2) スペース区切りの文字列をリストにする → 文字列メソッド split

split( [sep [,maxsplit]])
sep を単語の境界として文字列を単語に分割し、分割された単語 からなるリストを返します。

>>> mojilist = moji.split()
>>> mojilist
['xxx', 'xxxx', 'xxx@', '1', '2', '3', '44', '555', 'xxx', 'xxx']

http://d.hatena.ne.jp/n00dle/20090705/1246726299
http://tibet.que.ne.jp/otani/2004python/python12.html

(3) リスト内の要素(文字列)のIndexの取得 -- 文字列メソッド index

リストに要素の検索だけなら in

>>> mojilist
['xxx', 'xxxx', 'xxx@', '1', '2', '3', '44', '555', 'xxx', 'xxx']
>>> "xxx@" in mojilist
True

文字列の場所(Index)の取得
>>> mojilist.index("xxx@")
2

(3) xxx@ に続く5個の文字列(要素)の取得

>>> mojilist[2+1:2+6]
['1', '2', '3', '44', '555']

http://d.hatena.ne.jp/yumimue/20071205/1196839438


あと、splitlines は、小さなファイルを解析する場合、便利そうです。たとえば、
1. テキストファイルを、1行ごとにリスト化
2. リストの要素を、スペース区切りにリスト化
3. リストの要素を、indexで検索

splitlines( [keepends])
文字列を改行部分で分解し、各行からなるリストを返します。

http://www.python.jp/doc/2.5/lib/string-methods.html