Python入門トップページ


目次

  1. 仮想環境を構築し,watchdog をインストールする
  2. Watchdog でフォルダを監視する
  3. 新しいファイルを検知する
  4. 検知した新しいファイルを待ち行列フォルダに移動する
  5. 文字起こし処理用のワーカープログラムのひな形を作成する
  6. ワーカープログラムを常駐化する
  7. フォルダ監視とワーカープログラムでパイプライン処理する
  8. 処理用フォルダを設置してそこで処理を行う
  9. ファイルサイズの変化を監視する
  10. サイズの大きなファイルのコピーに対応する
  11. タイムスタンプを表示する
  12. Subprocess で外部コマンドを起動する
  13. WhisperX の設定を行う
  14. ワーカープログラムで音声データからの文字起こしを実行する
  15. 文字起こし結果を完了用フォルダに移動する
  16. ログを保存し例外を処理する
  17. サブフォルダに結果を格納する
  18. Ollama をインストールする
  19. Python から Ollama にプロンプトを送る
  20. Ollama 処理を関数化する
  21. 文字起こしデータから議事録を作成する
  22. サイズの大きなテキストファイルにも対応する
  23. ワーカープログラムで文字起こし結果から議事録を生成する
  24. 議事録をマークダウンファイルに出力する
  25. 文字コードを強制的に指定する

フォルダ監視により,音声ファイルから文字起こしと議事録生成を自動化しよう

Watchdog でフォルダを監視する

Python のコード watch.py を次のとおり作成します.コードが設置されたフォルダに watch フォルダを作成します.コードを実行している間に watch フォルダにファイルを設置したり,編集したり,削除したりした場合にそのことを検知することができます.なお,pathlib に関する説明はこちらを参照してください.

watch.py
from pathlib import Path
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import time

BASE_DIR = Path(__file__).parent
WATCH_DIR = BASE_DIR / "watch"

# ディレクトリを作っておく
WATCH_DIR.mkdir(parents=True, exist_ok=True)

class MyHandler(FileSystemEventHandler):
    """
    watchdog が用意している FileSystemEventHandler クラスの継承
    「ファイル監視イベントが発生したときに何をするか」を定義する
    """
    def on_any_event(self, event):
        print(event.event_type, event.src_path)

observer = Observer() # 「監視員を作成する」処理

# 監視条件設定
observer.schedule(
    MyHandler(),
    path=WATCH_DIR,
    recursive=False # とりあえず直下だけを監視
)

observer.start() # 監視を始める → 別スレッド(observerスレッド)が生成される

try:
    while True:
        time.sleep(1)

except KeyboardInterrupt:
    print("停止します")
    observer.stop()

observer.join() # observerスレッドが終わるまで待つ

コードの作成ができたら,次のコマンドで実行します.プログラムは Ctrl + C を押すまで実行状態が続きます.つまりプロンプトが返ってこない状態になります.また,実行時に watch フォルダが存在しなければ自動的に作成されているはずです.

(py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog>python watch.py ⏎

プログラムの実行中に watch フォルダに任意のファイルを手作業で配置します.例えば,「sample1.md」と「sample2.md」を作成した後,まとめて削除すると,次のようなイベントを検知することができました.

(py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog> python watch.py
created C:\Users\rinsaka\Documents\python\watchdog\watch\sample1.md
modified C:\Users\rinsaka\Documents\python\watchdog\watch\sample1.md
modified C:\Users\rinsaka\Documents\python\watchdog\watch\sample1.md
attrib C:\Users\rinsaka\Documents\python\watchdog\watch\sample1.md
created C:\Users\rinsaka\Documents\python\watchdog\watch\sample2.md
modified C:\Users\rinsaka\Documents\python\watchdog\watch\sample2.md
attrib C:\Users\rinsaka\Documents\python\watchdog\watch\sample2.md
deleted C:\Users\rinsaka\Documents\python\watchdog\watch\sample1.md
deleted C:\Users\rinsaka\Documents\python\watchdog\watch\sample2.md
Ctrl + C
停止します
(py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog>

最後に Ctrl + C で実行を終了します.ファイルを設置したときに created,modified,attrib という複数のイベントタイプが発生し,削除したときには deleted というイベントタイプが発生していることがわかります.

今回の目標を実現するには新たなファイルの設置イベントだけを取得できたら良いでしょう.したがって,次のページでは created イベントだけを取得してみます.

目次に戻る