Python 3でファイルの変更を監視する方法
Python 3でファイルの変更を監視することは、ログファイルの追跡やリアルタイムデータ処理など、さまざまな用途に役立ちます。この記事では、Pythonでファイルの変更を監視する方法を詳しく解説し、具体的なサンプルコードをいくつか紹介します。
Pythonでファイル変更を監視するライブラリ
Pythonには、ファイルシステムの変更を監視するためのライブラリがいくつかあります。その中でも特に便利なのが、watchdogライブラリです。このライブラリは、ファイルやディレクトリの変更を監視し、変更があった際にイベントを発行します。
watchdogライブラリのインストール
まず、watchdogライブラリをインストールする必要があります。これはpipを使って簡単にインストールできます。
pip install watchdog
サンプルコード1: ファイル変更の基本的な監視
以下のサンプルコードは、指定したディレクトリ内のファイル変更を監視し、変更があった場合にコンソールにメッセージを表示します。
from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler import time class MyHandler(FileSystemEventHandler): def on_modified(self, event): print(f'ファイルが変更されました: {event.src_path}') if __name__ == "__main__": path = "." # 監視したいディレクトリのパス event_handler = MyHandler() observer = Observer() observer.schedule(event_handler, path, recursive=True) observer.start() try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() observer.join()
このコードを実行すると、指定したディレクトリ内のファイルが変更されるたびに、そのファイルパスがコンソールに表示されます。
サンプルコード2: ファイルの作成と削除の監視
次に、ファイルの作成と削除も監視する例を示します。
class MyHandler(FileSystemEventHandler): def on_created(self, event): print(f'ファイルが作成されました: {event.src_path}') def on_deleted(self, event): print(f'ファイルが削除されました: {event.src_path}') # 上記のmain関数はそのまま使用
このコードを実行すると、ファイルが作成または削除されるたびに、そのイベントがコンソールに表示されます。
サンプルコード3: ファイルの移動と名前変更の監視
最後に、ファイルの移動と名前変更を監視する方法を紹介します。
class MyHandler(FileSystemEventHandler): def on_moved(self, event): print(f'ファイルが移動または名前変更されました: {event.src_path} -> {event.dest_path}') # 上記のmain関数はそのまま使用
このコードを実行すると、ファイルが移動または名前変更されるたびに、そのイベントがコンソールに表示されます。
まとめ
Pythonのwatchdogライブラリを使用することで、ファイルシステムの変更を簡単に監視することができます。この記事で紹介したサンプルコードを参考に、さまざまな用途に応じたファイル監視システムを構築してみてください。
Python 3 でファイルの変更を監視する方法は、`watchdog` ライブラリを使用することが一般的です。`watchdog` ライブラリは、ファイルシステムの変更を監視し、変更があった場合に指定したアクションを実行する機能を提供します。以下は、`watchdog` ライブラリを使用してファイルの変更を監視する簡単な例です。
“`python
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandlerclass MyHandler(FileSystemEventHandler):
def on_modified(self, event):
if event.is_directory:
return
print(f’File {event.src_path} has been modified’)if __name__ == “__main__”:
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path=’.’, recursive=True)
observer.start()try:
while True:
pass
except KeyboardInterrupt:
observer.stop()observer.join()
“`この例では、`MyHandler` クラスを定義し、`on_modified` メソッドをオーバーライドしてファイルの変更を検知する処理を記述しています。`Observer` クラスを使用して監視を開始し、`Ctrl + C` でプログラムを停止するまで監視を続けます。