欢迎访问宙启技术站
智能推送

使用Python的watchdog.observersObserver()实现监控指定文件后缀的变化

发布时间:2024-01-10 15:22:42

watchdog.observers.Observer()是watchdog模块中的一个观察者类,用于监控指定的文件或文件夹,并在文件或文件夹发生变化时触发相应的事件处理方法。

下面是一个使用Python的watchdog.observers.Observer()实现监控指定文件后缀的变化的例子:

import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler


class MyHandler(FileSystemEventHandler):
    def __init__(self, file_ext):
        super().__init__()
        self.file_ext = file_ext

    def on_modified(self, event):
        if not event.is_directory and event.src_path.endswith(self.file_ext):
            print(f"File {event.src_path} modified")


if __name__ == "__main__":
    path = "/path/to/folder"  # 监控文件夹路径
    file_ext = ".txt"  # 监控文件后缀

    event_handler = MyHandler(file_ext)
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()

    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()

    observer.join()

上述代码首先定义了一个类MyHandler,继承自watchdog.events.FileSystemEventHandler,并重写了其中的on_modified方法。在on_modified方法中,判断event事件是否是文件而不是文件夹,并且后缀名是否是指定的file_ext后缀,如果满足条件,则打印出文件路径及其变化的信息。

在主函数中,首先设置了观察的文件夹路径path和要监控的文件后缀file_ext。然后创建了一个MyHandler实例event_handler,并将其作为事件处理器传递给Observer实例observer的schedule方法。最后调用observer的start方法开始监控。

在主函数的try-except语句中,通过捕获KeyboardInterrupt异常来停止观察器。调用observer的stop方法停止监控,并通过observer的join方法等待观察器的线程完成。

使用上述代码,可以实时监控指定文件夹下所有指定后缀名的文件变化,并根据需要进行相应的操作。