1. 先下載對應庫:
pip install watchdog
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandlerclass FileChangeHandler(FileSystemEventHandler):def on_modified(self, event):# 當文件被修改時觸發此方法if not event.is_directory:print(f'文件 {event.src_path} 被修改')if __name__ == "__main__":# 要監視的目錄路徑#這里填寫具體的目錄位置信息,不是具體到某個文件夾path_to_monitor = '.' # 這里可以將 '.' 替換為你要監控的實際目錄路徑event_handler = FileChangeHandler()observer = Observer()# 將事件處理程序與要監視的路徑關聯起來,并設置遞歸監視(包括子目錄)observer.schedule(event_handler, path_to_monitor, recursive=True) observer.start() # 啟動觀察者try:while True:time.sleep(1) # 保持程序運行,持續監聽except KeyboardInterrupt:observer.stop() # 按 Ctrl+C 停止監聽observer.join() # 等待觀察者線程結束
上述代碼具體解析:
2. 定義了一個繼承自 FileSystemEventHandler 的類 FileChangeHandler,并重寫了 on_modified 方法,用于處理文件修改事件
3. 在 main 部分,首先指定要監視的目錄路徑(path_to_monitor)。
3.1 創建 FileChangeHandler 的實例 event_handler 和 Observer 的實例 observer。
3.2 使用 observer.schedule 方法將事件處理程序與要監視的路徑關聯起來,并通過設置 recursive=True 來遞歸監視目錄及其子目錄中的文件變化。
3.3 調用 observer.start 啟動觀察者,使其開始監聽文件系統事件。
3.4 使用一個無限循環保持程序運行,以便持續監聽文件系統的變化。當按下 Ctrl+C 時,捕獲 KeyboardInterrupt 異常,調用 observer.stop 停止觀察者,并使用 observer.join 等待觀察者線程結束。
4. recursive具體說明
當 recursive=True 時(這是默認情況),如果 path
是一個目錄,那么不僅會監控該目錄本身的變化,還會遞歸地監控其所有子目錄的變化,即子目錄中的文件和子目錄的創建、修改、刪除、移動等操作都會觸發相應的事件。
而當 recursive=False 時,如果 path
是一個目錄,只會監控該目錄本身的變化,不會深入監控其子目錄中的文件和子目錄的變化。如果 path 是一個文件,則無論 recursive
的值如何,都只會監控該文件的變化。