【Google Drive】のテキストファイルを正規表現検索【Google Colab】

#python3 #grep

GASでできそうだけど PCじゃないとスクリプトエディタが出てこないのよね。
でもそういえば Colabの ipynbファイルは勝手にドライブに保存されるくらいだからアクセスできるかな。(ググる)…お? マウントできた。
そういうわけで Pythonで書く。
ただ、Google Colabはタブレットても利用できるとはいえ、CTRLキーが打てる(ソフト)キーボードがないとキツい。
あ、検索できるのはテキストデータのファイル(txt, csv, jsonl, xml, md, py, js等)だけです^^

    //コードセルに↓

        #grep_text.

import pathlib
import fileinput
import re

       #パラメタ設定.
検索文字列 = r'Python'  #正規表現
大文字小文字区別せず = re.IGNORECASE
#大文字小文字区別せず = None  #区別する
ファイル指定 = '*.txt'
#ファイル指定 = '**/*.txt'  #再帰探索
フォルダ = '/content/drive/MyDrive'

       #準備.
pattern = (
   re.compile(検索文字列, 大文字小文字区別せず) if 大文字小文字区別せず else
   re.compile(検索文字列))
path_objects = pathlib.Path(フォルダ)

       #ファイル インプット オブジェクト.
file_input_obj.close() if 'file_input_obj' in globals() else None
file_input_obj = fileinput.input(
   str(each) for each in path_objects.glob(ファイル指定))

       #メイン.
結果 = [
   fileinput.filename().replace('/content/drive/MyDrive', '') + ':' + line
   for line in file_input_obj if pattern.search(line)]

       #ファイル インプット オブジェクト閉じる.
file_input_obj.close()

       #出力.
print(''.join(結果))
"""
outfile.close() if 'outfile' in globals() else None
outfile = open('/content/drive/MyDrive/outfile.txt', 'w')
outfile.writelines(結果)
outfile.close()
"""

なお、以下のようなエラーメッセージが出るかもしれません。
「UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 61: invalid start byte」
utf-8以外の文字を見つけたので続行できない、とのことですので「どうにかして」検索対象ファイルを utf-8だけにしておいてください。
どうにかする方法は…まあまた今度^^

以上、がんばって Pythonで組んだけど実はワンライナーで済んだりも。

    //ワンライナー↓

!egrep -i 'Python' /content/drive/MyDrive/*.txt | sed -e 's,/content/drive/MyDrive,,'

こちらは SHIFT_JISでも止まらずに、ただ2バイト文字にマッチしないだけ…なのだが警告が無いのはそれはそれで良し悪しだなあ。
とはいえ正規表現がユニコードに対応しているかどうかは環境次第なので、grepも sedも mawkも対応している Colabはありがたや。

    //Google Colaboratory↓


いいなと思ったら応援しよう!