Python、「フォルダ内監視アプリ」作ってみた。
pip install watchdog
import time
import os
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from plyer import notification # plyerは通知を表示するためのライブラリです。インストール: pip install plyer
class FolderWatcher(FileSystemEventHandler):
def on_created(self, event):
if event.is_directory:
return
else:
self.show_notification(f"新しいファイルが追加されました: {event.src_path}")
def show_notification(self, message):
notification.notify(
title='フォルダ変更通知',
message=message,
app_name='Folder Watcher',
timeout=5
)
def watch_folder(folder_path):
event_handler = FolderWatcher()
observer = Observer()
observer.schedule(event_handler, path=folder_path, recursive=False)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
if __name__ == "__main__":
folder_path_to_watch = "監視するフォルダのパスをここに指定"
watch_folder(folder_path_to_watch)
他のフォルダもチェックしたい場合
import time
import os
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from plyer import notification
class FolderWatcher:
def __init__(self, folder_path, folder_name):
self.folder_path = folder_path
self.folder_name = folder_name
self.event_handler = FileSystemEventHandler()
self.last_notification = None
self.event_handler.on_created = self.on_created
self.event_handler.on_modified = self.on_modified
self.event_handler.on_deleted = self.on_deleted
self.observer = Observer()
self.observer.schedule(self.event_handler, path=self.folder_path, recursive=False)
def start(self):
self.observer.start()
def stop(self):
self.observer.stop()
self.observer.join()
def on_created(self, event):
if event.is_directory:
return
else:
time.sleep(1) # 新しいファイルが作成された後、1秒間待機
message = f"ファイルが作成されました: {event.src_path}"
# on_modified で通知された場合はスキップ
if message == self.last_notification:
return
self.show_notification(message, self.folder_name)
self.last_notification = message
def on_modified(self, event):
if event.is_directory:
return
else:
message = f"ファイルが変更されました: {event.src_path}"
# 前回と同じ通知の場合はスキップ
if message == self.last_notification:
return
self.show_notification(message, self.folder_name)
self.last_notification = message
def on_deleted(self, event):
if event.is_directory:
return
else:
pass
def show_notification(self, message, folder_name):
notification.notify(
title=f'フォルダ変更通知({folder_name})',
message=message,
app_name='Folder Watcher',
timeout=5
)
if __name__ == "__main__":
folder_path_to_watch = "C:\\Users\\デスクトップ\\1"
folder_path_to_watch2 = "C:\\Users\\デスクトップ\\1\\2"
watcher1 = FolderWatcher(folder_path_to_watch, "1")
watcher2 = FolderWatcher(folder_path_to_watch2, "2")
watcher1.start()
watcher2.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
watcher1.stop()
watcher2.stop()
1つデータが追加されると「作成されました」「変更されました」と2回通知が来てしまいますが、上書き保存された場合「変更されました」となるのでまぁこれでいいかなと思いました。
何度も、フォルダ内を確認するのが面倒だったのですが、これで解決しそうです。
最後までお読みいただきありがとうございます。
♡頂けますと、励みになります。
この記事が気に入ったらサポートをしてみませんか?