news 2026/4/23 14:05:08

(19)python开发经验 --- python监测文件/文件夹更改

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
(19)python开发经验 --- python监测文件/文件夹更改

文章目录

    • 1 概述
    • 2 安装watchdog
    • 3 使用示例

更多精彩内容
👉内容导航 👈
👉Qt开发 👈
👉python开发 👈

1 概述

  • python实现实时监控文件的创建、修改、删除操作

  • 跟踪文件夹内容的增删改变化

  • 可用于文件发生变化时自动触发相应处理逻辑

  • 实现热重载机制,如配置文件更新后自动重新加载

  • 事件去抖动(防抖):同一个文件1秒内多次事件只处理一次。


基于watchdog实现;

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

典型应用场景

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

2 安装watchdog

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

3 使用示例

importtimeimportosfrompathlibimportPathfromwatchdog.observersimportObserverfromwatchdog.eventsimportFileSystemEventHandlerclassWatchdogHandler(FileSystemEventHandler):def__init__(self):self._file_path=Noneself.last_modified={}# 上次修改时间defset_target_file(self,target_file):""" 设置监控的目标文件 :param target_file: :return: """ifPath(target_file).is_file()andos.path.exists(target_file):self._file_path=target_fileelse:raiseFileNotFoundError(f"{target_file}不存在")defdispatch(self,event):""" 对事件进行分发处理,过滤掉非目标文件的事件 :param event: :return: """# 忽略临时文件ifevent.src_path.endswith('~'):return# 如果没有设置目标文件,则处理所有事件ifself._file_pathisNone:super().dispatch(event)else:# 判断是否是目标文件,如果是则处理该事件ifos.path.abspath(event.src_path)==os.path.abspath(self._file_path):super().dispatch(event)defon_modified(self,event):""" 文件修改事件处理 """now=time.time()# 每个文件1秒内只响应一次ifnow-self.last_modified.get(event.src_path,0)>1:self.last_modified[event.src_path]=nowprint(f"文件被修改:{event.src_path}")defon_created(self,event):""" 文件创建事件处理 """print(f"文件被创建:{event.src_path}")defon_deleted(self,event):""" 文件删除事件处理 """print(f"文件被删除:{event.src_path}")classWatchdogPath:def__init__(self):self.observer=Observer()defstop(self):self.observer.stop()defwatchdog_path(self,target_path):""" 监控指定路径的文件或目录变化 :param target_path: 目标路径,可以是文件或目录 """ifnotos.path.exists(target_path):print(f"{target_path}不存在")returntarget_path=os.path.abspath(target_path)# 获取绝对路径event_handler=WatchdogHandler()# 如果是文件,则设置目标文件ifPath(target_path).is_file():event_handler.set_target_file(target_path)target_path=os.path.dirname(target_path)or"."# 获取文件所在目录self.observer.schedule(event_handler,target_path,recursive=False)self.observer.start()# 启动监控,在后台线程运行# 使用示例if__name__=="__main__":# target_path = "E:/Code/PythonProject2/test.pyproject"# target_path = "./test.pyproject"target_path="./"w=WatchdogPath()w.watchdog_path(target_path)w.observer.join()# 等待线程结束


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:36:18

【量子电路可视化进阶指南】:掌握颜色配置的5大核心原则与最佳实践

第一章:量子电路可视化的颜色配置在量子计算领域,量子电路的可视化是理解门操作、量子比特状态演化以及调试算法的重要手段。合理的颜色配置不仅能提升图表的可读性,还能帮助研究人员快速识别不同类型的量子门和电路结构。配色方案的设计原则…

作者头像 李华
网站建设 2026/4/23 11:38:28

Avue.js终极指南:用数据驱动视图构建企业级应用的完整方案

Avue.js终极指南:用数据驱动视图构建企业级应用的完整方案 【免费下载链接】avue 🔥Avue.js是基于现有的element-plus库进行的二次封装,简化一些繁琐的操作,核心理念为数据驱动视图,主要的组件库针对table表格和form表单场景&…

作者头像 李华
网站建设 2026/4/23 11:33:23

别再手动验证了!自动化评估量子机器学习结果的VSCode高级技巧

第一章:量子机器学习的 VSCode 结果评估在量子机器学习项目开发中,VSCode 作为主流集成开发环境,提供了强大的调试与结果可视化支持。通过插件如 Python、Quantum Development Kit 和 Jupyter,开发者能够在本地高效运行量子电路模…

作者头像 李华
网站建设 2026/4/23 11:35:33

XDM浏览器插件完全指南:从安装到精通下载管理的7个关键步骤

你是否曾经为了下载一个视频而烦恼?或者因为下载速度太慢而浪费宝贵时间?🤔 Xtreme Download Manager(XDM)的浏览器插件正是为你解决这些痛点而生的利器。本文将带你从零开始,全面掌握XDM插件的使用技巧&am…

作者头像 李华
网站建设 2026/4/18 8:53:56

Docker资源监控怎么做?资深架构师亲授边缘Agent部署的7个关键点

第一章:Docker资源监控的核心挑战与边缘Agent的定位在容器化环境中,Docker资源监控面临动态性强、生命周期短、资源隔离复杂等核心挑战。传统监控工具往往难以捕获瞬时容器的性能数据,导致指标缺失或误判。为应对这一问题,边缘Age…

作者头像 李华
网站建设 2026/4/23 13:17:27

【AI模型安全防护指南】:Docker权限校验避坑必备的5大核心策略

第一章:AI模型Docker权限校验的核心挑战在将AI模型部署至生产环境时,Docker已成为主流的容器化方案。然而,容器内部的权限管理常被忽视,导致潜在的安全漏洞与运行时异常。特别是在涉及GPU访问、文件系统挂载和网络隔离的场景中&am…

作者头像 李华