监控文件夹内容变化的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类中的操作,例如在发生文件被创建时发送邮件通知等。
