Python使用watchdog实时监测文件或文件夹的更改

 更新时间:2026年03月10日 09:22:08   作者:mahuifa  
这篇文章主要介绍了如何使用Python的watchdog库来实时监控文件和文件夹的创建、修改、删除操作,实现热重载机制和其他应用场景,需要的朋友可以参考下

1 概述

  • python实现实时监控文件的创建、修改、删除操作
  • 跟踪文件夹内容的增删改变化
  • 可用于文件发生变化时自动触发相应处理逻辑
  • 实现热重载机制,如配置文件更新后自动重新加载

基于watchdog 实现;

  • watchdog 是一个用于监控文件系统事件的 Python 库,它能够监听文件或目录的变化,如创建、修改、删除和移动等操作。这个库在需要实时响应文件系统变化的场景中非常有用,比如自动构建系统、日志监控、文件同步工具等。
  • 主要组件
    • Observer:观察者对象,负责监控指定路径的文件系统事件。它会持续运行一个后台线程来监听事件。
    • FileSystemEventHandler:事件处理器基类,用户需要继承这个类并重写相应的事件处理方法来定义对特定事件的响应。
    • Event:事件对象,代表一个具体的文件系统事件,包含了事件类型和相关文件路径等信息。

典型应用场景

  1. 开发工具
    • 代码编辑器监听源文件变化实现自动刷新
    • 构建工具监听源码变更触发重新编译
  2. 文件同步服务
    • 监控本地文件夹变化同步到云端
    • 实现文件实时备份功能
  3. 系统管理
    • 监控配置文件变化并动态调整程序行为
    • 跟踪重要目录的安全变更记录

2 安装watchdog

  • 使用命令行pip install watchdog进行安装;
pip install watchdog

3 使用示例

监测文件夹更改

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

class MyHandler(FileSystemEventHandler):
    def on_modified(self, event):
        print(f"文件被修改: {event.src_path}")
    def on_created(self, event):
        print(f"文件被创建: {event.src_path}")
    def on_deleted(self, event):
        print(f"文件被删除: {event.src_path}")

if __name__ == "__main__":
    path = "./"
    event_handler = MyHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

监测指定文件更改

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

class MyHandler(FileSystemEventHandler):
    def __init__(self, target_file):
        self.target_file = os.path.abspath(target_file)
        self.last_modified = 0

    def dispatch(self, event):
        if os.path.abspath(event.src_path) == self.target_file:
            super().dispatch(event)

    def on_modified(self, event):
        now = time.time()
        # 1秒内只响应一次
        if now - self.last_modified > 1:
            print(f"文件被修改: {event.src_path}")
            self.last_modified = now

    def on_created(self, event):
        print(f"文件被创建: {event.src_path}")

    def on_deleted(self, event):
        print(f"文件被删除: {event.src_path}")

if __name__ == "__main__":
    target_file = "test.txt"
    path = os.path.dirname(os.path.abspath(target_file)) or "."
    event_handler = MyHandler(target_file)
    observer = Observer()
    observer.schedule(event_handler, path, recursive=False)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()
  • 因为许多编辑器(如 VS Code、Notepad++ 等)在保存文件时,可能会执行多步操作(如写入临时文件、替换原文件、修改元数据等),导致 watchdog 检测到多次文件系统事件
  • 事件去抖动(防抖):在短时间内多次事件只处理一次。

到此这篇关于Python使用watchdog实时监测文件或文件夹更改的文章就介绍到这了,更多相关Python watchdog监测文件/文件夹更改内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python三大器之装饰器详解

    python三大器之装饰器详解

    这篇文章主要介绍了Python中的装饰器,涉及到Python中很多重要的特性,小编觉得这篇文章写的还不错,需要的朋友可以参考下
    2021-10-10
  • Python使用tablib生成excel文件的简单实现方法

    Python使用tablib生成excel文件的简单实现方法

    这篇文章主要介绍了Python使用tablib生成excel文件的方法,结合实例形式分析了tablib模块的相关使用技巧,需要的朋友可以参考下
    2016-03-03
  • Python处理JSON的完全指南:从基础到实战,掌握数据交换核心技能

    Python处理JSON的完全指南:从基础到实战,掌握数据交换核心技能

    本文将从 JSON 与 Python 的类型映射讲起,带你理解序列化与反序列化的底层逻辑,然后通过实战案例演示如何解析 API 数据、处理自定义对象,最后总结出 3 个避坑技巧
    2026-06-06
  • 详解Python打包分发工具setuptools

    详解Python打包分发工具setuptools

    这篇文章主要介绍了Python打包分发工具setuptools的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • Python 手动导包的实现

    Python 手动导包的实现

    本文主要介绍了Python 手动导包的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 使用Python绘制词云图的详细教程

    使用Python绘制词云图的详细教程

    词云(Word Cloud)是一种数据可视化技术,用于显示文本数据中的频繁单词,在本教程中,我们将使用 Python 的 wordcloud 库,结合 matplotlib 和 jieba 等工具,展示如何从文本数据生成词云图,需要的朋友可以参考下
    2025-01-01
  • python subprocess.run中的具体使用

    python subprocess.run中的具体使用

    subprocess.run是Python3.5及以上版本中用于运行子进程的函数,它提供了更简单和更强大的方式来创建和管理子进程,本文就来详细的介绍一下,感兴趣的可以了解一下
    2025-01-01
  • Python环境Pillow( PIL )图像处理工具使用解析

    Python环境Pillow( PIL )图像处理工具使用解析

    这篇文章主要介绍了Python环境Pillow( PIL )图像处理工具使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • python 爬取学信网登录页面的例子

    python 爬取学信网登录页面的例子

    今天小编就为大家分享一篇python 爬取学信网登录页面的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python中时间模块的基本使用教程

    python中时间模块的基本使用教程

    这篇文章主要给大家介绍了关于python中时间模块的基本使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05

最新评论