OCRの読み取り結果(field_value
)が「あいうえ銀行かきくけ支店普通1234567」だった場合に、
ここから銀行名と支店名をそれぞれ別の項目として分けて出力したい、という場合はどうすればいいでしょうか?
そんなときに使えるのが、スプリットです。
#やりかた(チートシート)
答えを先に言ってしまうと、field_value
が「あいうえ銀行かきくけ支店普通1234567」の場合に、
銀行名だけを取り出す処理は以下のとおりです。
#銀行名を取り出す
field_value = field_value.split("銀行")[0]
こんなかんじ↓で、「あいうえ」が取り出せたのがわかります。
また、同じくfield_value
が「あいうえ銀行かきくけ支店普通12345678」の場合に、
支店名だけを取り出す処理は以下のとおりです。
#銀行の支店名を取り出す
field_value = field_value.split("銀行")[1]
field_value = field_value.split("支店")[0]
こんなかんじ↓で、「かきくけ」が取り出せたのがわかります。
#仕組みの説明
上記の処理をすると、なぜ銀行名や支店名が取り出せるのかの説明です。
わかる人は読み飛ばしてください。
##スプリット
スプリットは、「文字列をある区切り文字で区切って、リストにする」という処理です。
……うっ……急にハードルが上がったぞ……と思った方は、文系初心者でもわかるsplitの説明をご参照ください。
pythonにおけるスプリットの処理は、処理対象.split(区切り文字)
の要領で行うことができます。
field_value.split("銀行")
という処理は、
「field_value
を"銀行"
という文字で区切ってリストにしてね」という意味です。
この処理をやると、以下のようなリストが取り出せます。
["あいうえ","かきくけ支店普通1234567"]
上記は2つの要素を持つリストで、
1番目の要素が"あいうえ"
、2番目の要素が"かきくけ支店普通1234567"
です。
##リストの中身を取り出す
上記の処理で、晴れて文字列を「リスト」にしたわけですが、
今度はそのリストから要素を取り出す処理です。
リスト[インデックス]
の要領で、これができます。
「インデックス」はざっくり言えば、リストの何番目にその要素が入っているかを示す番号なのですが、開始はゼロからになるというのがちょっとした注意点です。
##改めて、銀行名を取り出す処理を見てみましょう
今までの話を踏まえて、改めて銀行名を取り出す処理を見てみましょう。
#銀行名を取り出す
field_value = field_value.split("銀行")[0]
これはつまり、「field_value
の中身を"銀行"
という文字で区切ってリストにしてね。そしてそのリストの1番目の要素(=インデックスはゼロ!)を取り出して、そいつをfield_value
に入れてね」
「field_value
の中身を"銀行"
という文字で区切ってリストにしてね。」がfield_value.split("銀行")
、
「そしてそのリストの1番目の要素(=インデックスはゼロ!)を取り出して」が[0]
、
「そいつをfield_value
に入れてね」がfield_value =
に、
それぞれ該当します。
##改めて、支店名を取り出す処理を見てみましょう
ここまで押さえらえれていれば、支店名の処理もすぐに理解ができると思います。
#銀行の支店名を取り出す
field_value = field_value.split("銀行")[1]
field_value = field_value.split("支店")[0]
1行目は、「field_value
の中身を"銀行"
という文字で区切ってリストにしてね。そしてそのリストの2番目の要素(=インデックスは1!)を取り出して、そいつをfield_value
に入れてね」という意味です。
なので、この時点でfield_value
の中身は"かきくけ支店普通1234567"
になっています。
そのfield_value
に対して、2行目では、
「field_value
の中身を"支店"
という文字で区切ってリストにしてね。そしてそのリストの1番目の要素(=インデックスはゼロ!)を取り出して、そいつをfield_value
に入れてね」
という処理を行っています。
「field_value
の中身を"支店"
という文字で区切ってリストにしてね」の時点で、
["かきくけ","普通1234567"]
というリストができているので、
こいつの1番目の要素を取り出すことで、「かきくけ」という支店名が取り出せたというわけです!
##エラー制御や、テーブルに適用するときは?
上記の説明を見て、以下も知りたい! と思った方は、こちらの記事をご参照ください。
- 「銀行」や「支店」といった文字が含まれていなかったらどうなる? (エラー制御)
- テーブル項目にSplitをかけたいときはどうする?