特定の場所の行で文字列を検索し、検索結果を出力する次のプログラムがあります。検索で大文字と小文字を区別せず、出力行で検索文字列を強調表示するかどうかを選択できるようにしたいと考えています。
import re, os, glob
from colorama import init, Fore, Back, Style
init(autoreset=True)
path = "c:\\temp2"
os.chdir(path)
def get_str(msg):
myinput = input(msg)
while True:
if not bool(myinput):
myinput = input('No Input..\nDo it again\n-->')
continue
else:
return myinput
ext = get_str('Search the files with the following extension...')
find = get_str('Search string...')
case = get_str(' Ignore case of search string? (y/n)...')
print()
if case == "y" or case == "Y":
find = re.compile(find, re.I)
else:
find = find
files_to_search = glob.glob('*.' + ext)
for f in files_to_search:
input_file = os.path.join(path, f)
with open(input_file) as fi:
file_list = fi.read().splitlines()
for line in file_list:
if re.search(find, line):
line = re.sub(find, Fore.YELLOW + find + Fore.RESET, line)
print(f, "--", line)
ケースに「n」を選択すると、プログラムが機能します。「y」を選択すると、プログラムの実行時に次のエラーが発生します。
Search the files with the following extension...txt
Search string...this
Ignore case of search string? (y/n)...y
Traceback (most recent call last):
File "C:\7. apps\eclipse\1. workspace\learning\scratch\scratchy.py", line 36, in <module>
line = re.sub(find, Fore.YELLOW + find + Fore.RESET, line)
TypeError: Can't convert '_sre.SRE_Pattern' object to str implicitly
「はい」の場合にこれを機能させるにはどうすればよいですか?