--- Title: 簡易 grep Author: yamasyuh68 Web: https://mimemo.io/m/ZYrNkl17anGQqA5 --- 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アプリにすぐにでも発展しそうだ ヒットしたファイルをダブルクリックしたら該当行を開くようなソフトが良いね **作るか???** -------- --> [その他もろもろの開発 # ](https://mimemo.io/m/p5be8G9RdeoWxkE)