watchdog模块监控文件

发布时间 2023-08-28 18:22:13作者: donfag

watchdog用来监控指定目录/文件的变化,如添加删除文件或目录、修改文件内容、重命名文件或目录等,每种变化都会产生一个事件,且有一个特定的事件类与之对应,然后通过事件处理类来处理对应的事件,如何处理事件完全可以自定义,只需继承事件处理类的基类并重写对应的实例方法:

 1 from watchdog.observers import Observer
 2 from watchdog.events import *
 3 import time
 4 class FileEventHandler(FileSystemEventHandler):
 5     def __init__(self):
 6         FileSystemEventHandler.__init__(self)
 7     def on_moved(self, event):
 8         now = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
 9         if event.is_directory:
10             print(f"{now} 文件夹由 {event.src_path} 移动至 {event.dest_path}")
11         else:
12             print(f"{now} 文件由 {event.src_path} 移动至 {event.dest_path}")
13     def on_created(self, event):
14         now = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
15         if event.is_directory:
16             print(f"{now} 文件夹 {event.src_path} 创建")
17         else:
18             print(f"{now} 文件 {event.src_path} 创建")
19     def on_deleted(self, event):
20         now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
21         if event.is_directory:
22             print(f"{now} 文件夹 {event.src_path} 删除")
23         else:
24             print(f"{now} 文件 {event.src_path} 删除")
25     def on_modified(self, event):
26         now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
27         if event.is_directory:
28             print(f"{now} 文件夹 {event.src_path} 修改")
29         else:
30             print(f"{now} 文件由 {event.src_path} 修改")
31 
32 if __name__ == "__main__":
33     observer = Observer()
34     path = r"d:\test"
35     event_handler = FileEventHandler()
36     observer.schedule(event_handler,path,True) #True表示递归子目录
37     print(f"监控目录{path}")
38     observer.start()
39     observer.join()