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. 文字コードを強制的に指定する

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

ワーカープログラムを常駐化する

前のページのワーカープログラムでは待ち行列用 queue フォルダが空になればプログラムの実行が終了しました.ここではワーカープログラムを常駐化し,新たなファイルが待ち行列に加わったらそのファイルも処理されるようにします.

具体的には次のとおり,try による例外処理と while による無限ループを作成します.ここで,time.sleep(1) によって1秒間動作が停止することにより,超高速で無限ループが回り続け CPU を無駄に食い潰すことを防止しています.

worker.py
from pathlib import Path
import shutil
import time

BASE_DIR = Path(__file__).parent
QUEUE_DIR = BASE_DIR / "queue"
DONE_DIR = BASE_DIR / "done"

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

try:
    while True:
        for src in QUEUE_DIR.glob("*.md"): # 拡張子が .md のファイルだけ
            print(f"処理開始: {src.name}")
            with open(src, "r", encoding="utf-8") as f:
                print(f.read())
            dst = DONE_DIR / src.name
            shutil.move(src, dst)
            print(f"完了: {dst}")
        time.sleep(1)

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

プログラムを実行する前に,待ち行列用 queue フォルダに2つのマークダウンファイルが格納されていることを確認します.また,完了用 done フォルダは空であることも確認します.

(py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog> gci queue ⏎

    ディレクトリ:C:\Users\rinsaka\Documents\python\watchdog\queue

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---          2026/10/25    18:18             56 sample1.md
-a---          2026/10/25    18:18            115 sample2.md

(py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog> gci done ⏎
(py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog>

プログラムを実行します.実行直後に2つのマークダウンファイルの内容が表示され,完了用 done フォルダに移動されました.その後,sample1.md ファイルを3度 queue フォルダに移動させました.その都度,内容が表示されて done フォルダに戻ることを確認しました

(py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog> python worker.py ⏎
処理開始: sample1.md
# Watchdog
Watchdogでフォルダを監視します.

完了: C:\Users\rinsaka\Documents\python\watchdog\done\sample1.md
処理開始: sample2.md
# 自動処理
新たなファイルが保存されたときに,自動的に何らかの処理を行いたい.

完了: C:\Users\rinsaka\Documents\python\watchdog\done\sample2.md
処理開始: sample1.md
# Watchdog
Watchdogでフォルダを監視します.

完了: C:\Users\rinsaka\Documents\python\watchdog\done\sample1.md
処理開始: sample1.md
# Watchdog
Watchdogでフォルダを監視します.

完了: C:\Users\rinsaka\Documents\python\watchdog\done\sample1.md
処理開始: sample1.md
# Watchdog
Watchdogでフォルダを監視します.

完了: C:\Users\rinsaka\Documents\python\watchdog\done\sample1.md
Ctrl + C
停止します
(py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog>

プログラムの実行を Ctrl + C で終了させた後,待ち行列用 queue フォルダが空になり,完了用 done フォルダに格納されていることを確認します.

(py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog> gci queue ⏎
(py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog> gci done ⏎

    ディレクトリ:C:\Users\rinsaka\Documents\python\watchdog\done

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---          2026/10/25    18:18             56 sample1.md
-a---          2026/10/25    18:18            115 sample2.md

(py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog>

現時点でフォルダ監視とワーカープログラムの基本機能が作成できました.次のページでは両方のプログラムを同時に起動し,パイプライン処理を行ってみます.

目次に戻る