目次
Python3でWordファイル(docx)内のテキストを検索する
Wordファイル(Docx)内のテキストを検索するPythonスクリプトサンプルです。
動作確認は、Windows11/Anaconda/Python3.8で行っています。
Python-docxを使います
docxファイルを検索するには、python-docxモジュールのインストールが必要です。
pipなら
pip install python-docx
ですかね。
Pythonで検索するスクリプト
ソースはこんな感じです。
from docx import Document import glob # import sys # argvs = sys.argv # argc = len(argvs) # if (argc != 3): # print('引数に 検索文字 検索先フォルダパスを指定します') # quit() # search_condition = argvs[1] # folder = argvs[2] search_condition = "滞納" folder = "C:\\boku\\AAAA\\BBBBBBBBBB" files = glob.glob(folder + '\\**\\*.docx', recursive=True) for file in files: try: document = Document(file) except BaseException: continue count = 0 for para in document.paragraphs: count += 1 if para.text.find(search_condition) > -1: print(file + ":" + '行' + str(count) + ':' + para.text)
簡単に使いたいので、検索条件やフォルダはソース中に書いています。
汎用ではなく、開発環境(VSCode)でソース開いて検索条件とフォルダを書き換えて「Run without debugging」(ターミナルで実行)して結果を見る使い方だからです。
ただ、コマンドで使いたいときはあるかもしれないので、一応、引数取得処理も書いてコメントアウトしてあります。
僕はまだ使ったことがないです(笑)
ソースコードのポイント
短いスクリプトですし、python-docxの機能も検索しか使っていないので、特に補足・解説するようなところはないのですが1点だけ。
try: document = Document(file) except BaseException: continue
この部分は大切です。
なぜかというと、こうしないと以下のような例外で落ちてしまって、なかなか検索がすすまないからです。
docx.opc.exceptions.PackageNotFoundError
これが発生する原因はいろいろあります。
基本的に、ショートカットでリンク切れしているものが引っかかることが多いですけど、どこにあるかわからない中間ファイル(Wordの編集中にできるやつ)がひっかかったりして、エラーになるファイルを除く対応をするのはしんどいです。
この例外が発生するのは「document = Document(file)」の時なので、そこで例外をひろって発生していたら次「ocntinue」するようにして逃げてます。
今回はこんなところで。
ではでは。