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

监控文件夹内容变化的Python脚本实例(watchdog.observersObserver())

发布时间:2024-01-10 15:23:47

下面是一个实例,展示了如何使用watchdog库中的observers和Observer类来监控文件夹内容的变化。

首先,我们需要安装watchdog库。可以使用pip命令来安装:

pip install watchdog

接下来,我们编写一个Python脚本,以监控指定的文件夹中内容的变化,并在发生变化时执行特定的操作。

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

# 继承自FileSystemEventHandler,用于处理文件夹内容变化事件
class MyHandler(FileSystemEventHandler):
    def on_any_event(self, event):
        # 处理文件夹的内容变化
        if event.is_directory:
            return None

        # 处理文件的变化
        elif event.event_type == 'created':
            print(f"文件{event.src_path}被创建!")
        elif event.event_type == 'deleted':
            print(f"文件{event.src_path}被删除!")
        elif event.event_type == 'modified':
            print(f"文件{event.src_path}被修改!")
        elif event.event_type == 'moved':
            print(f"文件{event.src_path}被移动到{event.dest_path}!")

if __name__ == "__main__":
    # 需要监控的文件夹路径
    folder = '/path/to/folder'
    
    # 创建Observer对象,并将处理事件的handler注册到Observer对象上
    observer = Observer()
    observer.schedule(MyHandler(), folder, recursive=True)

    # 启动Observer对象的处理循环
    observer.start()

    try:
        while True:
            # 每隔一段时间检查一次是否有事件发生
            time.sleep(1)
    except KeyboardInterrupt:
        # 当出现中断信号(比如按下Ctrl+C)时停止处理循环
        observer.stop()

    # 等待Observer对象停止处理循环,并清理资源
    observer.join()

在上述代码中,我们首先定义了一个MyHandler类,它继承自FileSystemEventHandler类。该类用于处理文件夹内容的变化事件。在on_any_event方法中,我们判断事件的类型,然后执行相应的操作。

在if __name__ == "__main__":语句块中,我们指定了需要监控的文件夹路径,并创建了一个Observer对象。然后,我们将MyHandler对象注册到Observer对象上,并指定了需要监控的文件夹路径以及是否递归监控子文件夹。

最后,我们启动Observer对象的处理循环,并在循环中每隔一段时间检查一次是否有事件发生。当出现中断信号(比如按下Ctrl+C)时,停止处理循环,并等待Observer对象停止处理循环,最后清理资源。

你可以根据需要修改MyHandler类中的操作,例如在发生文件被创建时发送邮件通知等。