Pythonでフォルダ監視 編集ファイルの取得
前回からの変更点
監視フォルダ内にある既存のファイルの移動イベントを取得する処理を追加
イベントクラスの作成
新規作成時と同様に引数にselfとイベントを設定したon_moved(self,event)を作成
※注意点
watchdogはあくまでフォルダを監視するライブラリなので実際にファイル自体を移動したイベントを取得するものではない。
今回の場合on_movedが実行される条件としては、監視フォルダ内のファイル名が変更された場合。
on_modified()との違い
じゃあ、on_modified()との違いって?
挙動としてはまず①on_moved()でファイル名の変更イベントをキャッチし、②on_modified()でフォルダ内のイベントをキャッチする。
ファイルの新規作成、削除も同様の挙動で最初に新規作成、削除のイベントがキャッチされ、最後にフォルダ内の変更イベントが実行される。
ソースコード
import time
import os
from watchdog.events import FileSystemEventHandler
from watchdog.observers import Observer
watch_dir = "フォルダ監視パス"
class ChangeHandler(FileSystemEventHandler):
#001
def on_created(self, event):
filepath = event.src_path
filename = os.path.basename(filepath)
print('%sが新規で作成!' % filename)
#002
def on_modified(self, event):
filepath = event.src_path
filename = os.path.basename(filepath)
print('%sが修正されたよ!' % filename)
#003
def on_deleted(self, event):
filepath = event.src_path
filename = os.path.basename(filepath)
print('%sが削除されたよ!' % filename)
#004
def on_moved(self, event):
filepath = event.src_path
filename = os.path.basename(filepath)
print('%sが移動されたよ!' % filename)
if __name__ in '__main__':
while 1:
event_handler = ChangeHandler()
observer = Observer()
observer.schedule(event_handler, watch_dir, recursive=True)
observer.start()
try:
while True:
time.sleep(0.1)
except KeyboardInterrupt:
observer.stop()
observer.join()