ここでは監視用の watch フォルダに新たなファイルが設置されたことを確認したら自動的に待ち行列用の queue フォルダに移動するよう処理を記述していきます.
watch.py
from pathlib import Path
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import shutil # ファイルのコピー,移動などを行う標準ライブラリ
import time
BASE_DIR = Path(__file__).parent
WATCH_DIR = BASE_DIR / "watch"
QUEUE_DIR = BASE_DIR / "queue"
# ディレクトリを作っておく
WATCH_DIR.mkdir(parents=True, exist_ok=True)
QUEUE_DIR.mkdir(parents=True, exist_ok=True)
class MyHandler(FileSystemEventHandler):
"""
watchdog が用意している FileSystemEventHandler クラスの継承
「ファイル監視イベントが発生したときに何をするか」を定義する
"""
def on_created(self, event):
if event.is_directory: # ディレクトリは無視
return
src = Path(event.src_path)
print(f"新しいファイルを検出: {src}")
print(f"新しいファイルの名前: {src.name}")
dst = QUEUE_DIR / src.name # 移動先の指定
shutil.move(src, dst) # ファイルの移動
print(f"新しいファイルを移動: {dst}")
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スレッドが終わるまで待つ
次のコマンドでプログラムを実行します.その後,2つのマークダウンファイルを watch ディレクトリにコピー&ペーストします.
(py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog>python watch.py ⏎ 新しいファイルを検出: C:\Users\rinsaka\Documents\python\watchdog\watch\sample2.md 新しいファイルの名前: sample2.md 新しいファイルを移動: C:\Users\rinsaka\Documents\python\watchdog\queue\sample2.md 新しいファイルを検出: C:\Users\rinsaka\Documents\python\watchdog\watch\sample1.md 新しいファイルの名前: sample1.md 新しいファイルを移動: C:\Users\rinsaka\Documents\python\watchdog\queue\sample1.md Ctrl + C 停止します (py313watchdog) PS C:\Users\rinsaka\Documents\python\watchdog>
監視用の watch フォルダにファイルをペーストした直後に待ち行列用の queue フォルダにファイルが移動したことが確認できるはずです.次のコマンドで結果を確認します.なお gci は Get-ChildItem のエイリアス(別名)です.
(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>
なお,現状では監視用 watch フォルダにコピーの処理をした直後に待ち行列用 queue フォルダに移動します.監視用フォルダにサイズの大きなファイルをネットワーク経由でファイルをダウンロードして保存する場合,ファイル全体のダウンロードが終了する前に移動処理が始まってしまう可能性があります.サイズの大きなファイルの取り扱いについては後のステップで考えることにします.次のページでは,待ち行列用 queue フォルダにあるファイルを走査して,対象となるファイルについて文字起こしなど何らかの処理を行うワーカープログラムを作成します.