python使用watchdog实现文件资源监控

2025-01-10 16:50

本文主要是介绍python使用watchdog实现文件资源监控,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧...

python文件监控库watchdogs简介

随着Python在各种应用领域中的广泛使用,其生态环境也在持续繁荣,特别是各种第三方库的诞生,极大地丰富了开发者的工具箱。在众多库中, watchdog 作为一个高效的文件系统监控库,对于实时响应文件系javascript统的各种事件(如文件创建、修改、删除等)提供了极大便利。无论是在需要监控项目文件变化以触发自动化构建的开发场景,还是在需要日志记录、文件备份等运维任务中, watchdog 都能发挥重要的作用。

文件资源监控

安装:pip install watchdog

watchdog 支持跨平台文件资源监控,可以检测指定文件夹下文件及文http://www.chinasem.cn件夹变动,当出现不同变动(新增、删除、修改)后,可进行相应处理。

from time import sleep, strftime
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
 
 
class FileMonitoring(FileSystemEventHandler):
    # event.is_directory 判断是否是目录操作
    def on_modified(self, event):  # 文件或文件夹被修改时触发(新增、删除及修改文件或文件夹都会被监测为文件夹的修改)
        tm = strftime("%Y-%m-%d %H:%M:%S")
        print(f'{tm} 修改文件夹{event.src_path}')
 
    def on_created(self, event):  # 文件或目录被创建时触发
        tm = strftime("%Y-%m-%d %H:%M:%S")
        if event.is_directory:
            print(f'{tm} 创建文件夹{event.src_path}')
        else:
            print(f'{tm} 创建文件{event.src_path}')
 
    def on_deleted(self, event):  # 文件或目录被删除时触发
        tm = strftime("%Y-%m-%d %H:%M:%S")
        if event.is_directory:
            print(f'{tm} 删除文件夹{event.src_path}')
        else:
            print(f'{tm} 删除文件{event.src_path}')
 
    def on_moved(self, event):  # 目录的创建和删除操作,被Watchdog视为移动操作,因此通过on_moved方法进行捕捉,重命名也可用此捕获。
        tm = strftime("%Y-%m-%d %H:%M:%S")
        if event.is_directory:
            print(f'{tm} 重命名文件夹:文件夹{event.src_path} 重命名为 {event.dest_path}')
        else:
            print(f'{tm} 重命名文件:文件{event.src_path} 重命名为  {event.dest_path}')
 
 
class MyFileMonitor():
    def __init__(self):
        self.event_handler = FileMonitoring()  # 初始化事件处理器实例
 
    def sever(self, watched_dir, recursive: bool = True):
        '''
        :param watched_dir: .schedule 方法设置要监控的目录路径和事件处理器
        :param recursive: recursive=True 参数以递归地监控目录内的所有子目录
        :return:
        '''
        self.observer = Observer()  # 初始化观察器
        self.observer.schedule(self.event_handler, watched_dir, recursive=recursive)  # 将事件处理器关联到观察器
        return self.observer
 
    def run(self, watched_dir, recursive: bool = True):
        '''
        启动观察器并进入无限循环,直到用户按下 Ctrl+C 中断程序,
        observer.stop() 和 observer.join() 来正确停止和清理观察器资源。
        '''
 
        observer = self.sever(watched_di编程r, recursive)
        observer.start()
        try:
            while True:
                sleep(.1)
        except KeyboardInterrupt:
            observer.stop()
 
        observer.join()

监测文件夹新增、删除、修改文件夹

在Python中,watchdog 库确实提供了方便的方式来监控文件夹及其内部文件的新增、删除、修改以及重命名等事件。下面是一个简单的示例,展示如何使用 watchdog 来监听一个文件夹中的这些事件

import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
 
# 定义事件处理器类
class MyHandler(FileSystemEventHandler):
    def on_modified(self, event):
        print(f'File modified: {event.src_path}')
 
    def on_created(self, event):
        print(f'File created: {event.src_path}')
 
    def on_deleted(self, event):
        print(f'File deleted: {event.src_path}')
 
    # 对于文件夹的创建、删除操作,请注意:
    # 目录级别的事件可通过on_moved方法捕获,因为创建和删除目录也表现为移动事件
    def on_moved(self, event):
        if event.is_directory:
            what = "Directory"
        else:
            what = "File"
        print(f'{what} moved: {event.src_path} to {event.dest_path}')
 
# 初始化事件处理器实例
event_handler = MyHandler()
 
# 指定要监控的文件夹路径
watched_dir = '/path/to/watch'
 
# 初始化观察器
observer = Observer()
 
# 将事件处理器关联到观察器
observer.schedule(event_handler, watched_dir, recursive=True)
 
# 启动观察器
observer.start()
 
print(f'Starting to watch {watched_dir} for file system events...')
try:
    while True:
        time.sleep(1)
except KeyboardInterrupt:
    observer.stop()
 
observer.join()

在这个例子中,MyHandler 类继承了 FileSystemEventHandler 并实现了几个方法来处理不同的文件系统事件。on_modified 方法会在文javascript件被修改时触发,on_created 在文件或目录被创建时触发,而 on_deleted 在文件或目录被删除时触发。对于目录的创建和删除操作,由于Watchdog将它们视为移动操作,因此通过 on_moved 方法进行捕捉,并检查 event.is_directory 属性以区分是文件还是目录。

通过 observer.schedule 方法设置要监控的目录路径和事件处理器,并设置 recursive=True 参数以递归地监控目录内的所有子目录。

最后启动观China编程察器并进入无限循环,直到用户按下 Ctrl+C 中断程序,此时会调用 observer.stop() 和 observer.join() 来正确停止和清理观察器资源。

到此这篇关于python使用watchdog实现文件资源监控的文章就介绍到这了,更多相关python watchdog文件资源监控内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于python使用watchdog实现文件资源监控的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153026

相关文章

Python在固定文件夹批量创建固定后缀的文件(方法详解)

《Python在固定文件夹批量创建固定后缀的文件(方法详解)》文章讲述了如何使用Python批量创建后缀为.md的文件夹,生成100个,代码中需要修改的路径、前缀和后缀名,并提供了注意事项和代码示例,... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5.

基于Java实现模板填充Word

《基于Java实现模板填充Word》这篇文章主要为大家详细介绍了如何用Java实现按产品经理提供的Word模板填充数据,并以word或pdf形式导出,有需要的小伙伴可以参考一下... Java实现按模板填充wor编程d本文讲解的需求是:我们需要把数据库中的某些数据按照 产品经理提供的 word模板,把数据

Python使用Colorama库美化终端输出的操作示例

《Python使用Colorama库美化终端输出的操作示例》在开发命令行工具或调试程序时,我们可能会希望通过颜色来区分重要信息,比如警告、错误、提示等,而Colorama是一个简单易用的Python库... 目录python Colorama 库详解:终端输出美化的神器1. Colorama 是什么?2.

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

python修改字符串值的三种方法

《python修改字符串值的三种方法》本文主要介绍了python修改字符串值的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录第一种方法:第二种方法:第三种方法:在python中,字符串对象是不可变类型,所以我们没办法直接

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

MySQL不使用子查询的原因及优化案例

《MySQL不使用子查询的原因及优化案例》对于mysql,不推荐使用子查询,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,本文给大家... 目录不推荐使用子查询和JOIN的原因解决方案优化案例案例1:查询所有有库存的商品信息案例2:使用EX

使用PyQt5编写一个简单的取色器

《使用PyQt5编写一个简单的取色器》:本文主要介绍PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16进制颜色编码,一款跟随鼠标刷新图像的RGB和16... 目录取色器1取色器2PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16

Python视频剪辑合并操作的实现示例

《Python视频剪辑合并操作的实现示例》很多人在创作视频时都需要进行剪辑,本文主要介绍了Python视频剪辑合并操作的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录介绍安装FFmpegWindowsMACOS安装MoviePy剪切视频合并视频转换视频结论介绍

spring6+JDK17实现SSM起步配置文件

《spring6+JDK17实现SSM起步配置文件》本文介绍了使用Spring6和JDK17配置SSM(Spring+SpringMVC+MyBatis)框架,文中通过示例代码介绍的非常详细,对大家的... 目录1.配置POM文件2.在resource目录下新建beans.XML文件,用于配置spirng3