アクサンの場合

Python3初心者が段々上達するログ

txtファイルを1行ずつ読み込み、正規表現で抜き出す

目的

  1. txtファイルを読み込んで、1行ずつ抜き出す
  2. 抜き出した行から正規表現で欲しい文字列を抜き出す
  3. 文字列をリストに追加する

実装

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を使わないコードがいいコードかもしれない。