簡易 grep

190722

作ってみた

  • あるフォルダに存在するテキストファイルの中を検索する必要が生じた
    普通にGREPってことになるが、ウインドウズだとどうすれば簡単なのか?
    とりあえず秀丸でイケるんだけど、秀丸を起動してグレップ画面にしてパラメータを設定するのは面倒だ
  • で、いつも通りQtでUIを作ろうと思ってコアの部分を考えてたら、コンソールで十分な気がしてきた
    input で文字列を手で入れれば良いだけ、対象のフォルダは決まってるから
    ほぼ瞬間で結果が出ます
  • 改めて感じたがpythonは手軽に書けるスクリプトなんだよね
    でも結構なソフトも書けてしまう、素晴らしいです
import glob 

search= input('Enter word you want to search : ')
print('searchword : ' , search)

fo=r't:\temp\***\*.txt'
for p in glob.iglob(fo , recursive=True):
 with open( p) as f:
  for i,l in enumerate(f.readlines()) :
   if search in l :
     print(p,'行:{}'.format(i),l) # ファイル名、行番号、行全体

input('pres any key .....')

190722

改良版

  • 繰り返し他の文字でもトライしたい場合がほとんどなので、ループするようにした
    動作は完璧、GUI要らないな
import glob 

while(1):
 search= input('Enter word you want to search : ')
 if not search:
  break

 print('searchword : ' , search)

 fo=r't:\temp\***\*.txt'
 for p in glob.iglob(fo , recursive=True):
  with open( p) as f:
   for i,l in enumerate(f.readlines()) :
    if search in l :
      print(p,'行:{}'.format(i),l) # ファイル名、行番号、行全体

 print('------')
  • ロケールが気になって調べた
>>> import locale
>>> locale.getpreferredencoding(False)
'cp932'
  • そっか、ウインドウズは932なんだな
    普通に保存したテキストなら大丈夫てことですね
    むしろutf-8の方が検索できないのかもしれない
  • 本来はこのプログラムもエンコードの自動判定ルーチンが必要なのかもしれないね

190725

改良~recursive

  • フォルダにutf8のテキストを置いて実行したらエラーで落ちた
    やっぱりなあ
    tryでエラーファイルは表示するようにしてみた
    ---> 何種類かチャレンジさせてみるか???
  • 必要が生じてrecursiveにした
    といってもglobの機能を使うだけだけど
    そうなると*.txt って書けないので、全部列挙させてから拡張子でチェックするルーチンになる
    foobarのalternativeで音声ファイルを列挙したのと同じ感じ、簡単に行けた
  • 対象フォルダの選択、再帰の選択、拡張子の選択が出来るようなUIを作れば汎用のgrepアプリにすぐにでも発展しそうだ
    ヒットしたファイルをダブルクリックしたら該当行を開くようなソフトが良いね
    作るか???

--> その他もろもろの開発 #

END

Close