txtファイルを1行ずつ読み込み、正規表現で抜き出す
目的
- txtファイルを読み込んで、1行ずつ抜き出す
- 抜き出した行から正規表現で欲しい文字列を抜き出す
- 文字列をリストに追加する
実装
import glob import re files = glob.glob("./*.txt") lists=[] for file in files: for line in open(file,"r"): char=re.match("[a-z]+",line) # re.match("正規表現",対象) if char != None: print(char.group(0)) lists.append(char.group(0)) else: pass
メモ
正規表現でマッチしたものはmatchオブジェクトで返される
matchオブジェクトは<_sre.SRE_Match object; span=(0, 5), match='noise'>
という中身をしている。そこで、match.group()
を用いる。match.group(0)
がマッチしたエントリを表示する。詳細は 6.2.4 Matchオブジェクトの項目を参照。
6.2. re — 正規表現 — Python 3.4.3 ドキュメントmatchやsearchでマッチしなかった場合Noneを返す
Noneの要素に対し、match.group()
メソッドを使うと、以下のようにエラー出てしまうから注意。
AttributeError Traceback (most recent call last) <ipython-input-32-dba9e862fa13> in <module>() 4 char=re.match("[a-z]+",line) ----> 6 print(char.group()) AttributeError: 'NoneType' object has no attribute 'group'
よって、実装コードのように分岐を入れなければならない。
- 条件分岐で、ある条件では何もしたくないときpassを使う
条件分岐させたとき、特に何もさせたくないこともある。そのときはpass
を使う。pass
を使わないコードがいいコードかもしれない。