スポンサーリンク

ファイルオープンしてreadlines()で1行ずつ読み込む

まずは、ファイルオープンしてreadlines()で1行ずつ読み込みます。

close忘れをなくすためにも、with open ~ as ~ の形式が便利だと思います。

1行ずつ読み込んだ結果はlineListに格納されます。

この後、lineListをforループ処理します。

with open('in.txt','r') as f:
	lineList = f.readlines()

スポンサーリンク

1行ずつforループ処理してreモジュールで検索

reモジュールをimportします。

import re

1行ずつforループ処理してre.search() で検索します。
例えば、下記のように
a~cの文字列、もしくは1~3の文字列を含んだ場合には、その行をprint出力します。
1行には改行も含まれているため、end=""と指定してprint出力時の改行は付けないようにします。
参考:[Python]改行なしでprint出力する(end=”を設定)

for line in lineList:
	if re.search(r'[a-c]|[1-3]', line):
		print(line, end="")

サンプルコード

下記がサンプルコードになります。

 $ cat sample.py 
#!/usr/bin/env python3
# coding: UTF-8

import re

with open('in.txt','r') as f:
	lineList = f.readlines()

for line in lineList:
	if re.search(r'[a-c]|[1-3]', line):
		print(line, end="")

下記が実行結果になります。
 $ ./sample.py 
a98b0s
d39l9
8c9l9

grepを使った検索

上記Pythonの処理を、grepを使うと下記のようになります。

 $ grep "[a-c]\|[1-3]" in.txt 
 

下記が実行結果になります。
 $ grep "[a-c]\|[1-3]" in.txt 
a98b0s
d39l9
8c9l9

grepコマンドのor検索時には、正規表現の”|”の前にバックスラッシュ”\”が必要になります。下記の参考記事を書いています。
参考:grepコマンドのor検索時には、正規表現の”|”の前にバックスラッシュ”\”が必要なので注意が必要(しばらく経つと忘れがち)

スポンサーリンク