当前位置: 首页 > article >正文

Python监听指定路径下文件夹变化

一、使用Python监听Windows系统中的新增文件夹

在日常工作中,许多任务需要我们监控特定目录,以便实时获取新创建的文件夹。这一需求在数据管理、文件备份和监控某些特定活动(如下载文件夹)时尤为重要。本文将介绍如何使用Python来监听Windows系统中指定目录的新增文件夹,并给出相关代码示例及运行说明。

监听文件夹及其工作原理

我们将利用Python中的watchdog库来实现文件夹的监听功能。watchdog是一个跨平台库,能够自动监控文件系统的变化。

安装依赖库

首先,我们需要安装watchdog库。可以通过以下命令在终端中安装:

pip install watchdog

 下面是一个完整的示例:

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

# 定义一个事件处理器
class MyHandler(FileSystemEventHandler):
    def on_created(self, event):
        # 仅监视文件夹的创建
        if event.is_directory:
            print(f"新增文件夹: {event.src_path}")

def monitor_directory(path):
    # 创建事件处理器实例
    event_handler = MyHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=False)
    observer.start()
    print(f"开始监听目录: {path}")

    try:
        while True:
            pass  # 保持程序运行
    except KeyboardInterrupt:
        observer.stop()
    observer.join()

if __name__ == "__main__":
    # 输入你的目标目录路径
    folder_to_monitor = "C:\\path\\to\\your\\directory"
    monitor_directory(folder_to_monitor)
代码解析
  1. 引入库:导入oswatchdog的相关模块。
  2. 创建事件处理器:我们定义了一个MyHandler类,继承自FileSystemEventHandler。该类实现了on_created方法,用于当文件夹被创建时输出消息。
  3. 设置观察者:创建一个Observer实例并指定需要监控的目录。recursive=False表示只监控指定目录,而不包括子目录。
  4. 启动观察:调用observer.start()方法开始监听,并通过一个无限循环保持程序运行。
  5. 异常处理:通过KeyboardInterrupt来优雅地停止监听。
运行示例

将上述代码保存为monitor.py,然后在命令行中运行:

python monitor.py

程序将开始监听指定的目录,一旦有新的文件夹被创建,它会在终端中输出相关信息。

 二、监控文件夹
及其内部文件的新增、删除、修改以及重命名等事件

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 方法会在文件被修改时触发;

on_created 在文件或目录被创建时触发;

on_deleted 在文件或目录被删除时触发。

对于目录的创建和删除操作,由于Watchdog将它们视为移动操作,因此通过 on_moved 方法进行捕捉,并检查 event.is_directory 属性以区分是文件还是目录。

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

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

参考:

windows 系统python对指定目录监听新增的文件夹_mob64ca12dc54c5的技术博客_51CTO博客

python watchdog 监测文件夹新增、删除、修改文件夹_python监控文件夹新增文件-CSDN博客


http://www.kler.cn/news/366610.html

相关文章:

  • Linux相关概念和易错知识点(16)(Shell原理、进程属性和环境变量表的联系)
  • shardingsphere-分表-按创建日期分表
  • Redisson(二)SpringBoot集成Redisson
  • Nginx、Tomcat等项目部署问题及解决方案详解
  • 鸿蒙next之导航组件跳转携带参数
  • 【linux网络编程】| 网络基础 | 解析IP与Mac地址的区别
  • Mac上面压缩文件出现__MACOSX文件夹问题
  • web查询数据库
  • SSRF实战:利用ssrf.php对自己内网网站尝试访问
  • 信号(三)【信号保存】
  • nuxt3项目创建
  • 【C++进阶篇】——STL的简介
  • 用友U8接口-库存管理(7)
  • HTML 区块
  • sql-labs靶场第二十关测试报告
  • 【Linux】从open到write:系统文件I/O 的奥秘与实战指南
  • 实测体验Claude 3.5升级版:AI首次实现直接操控电脑!
  • 【Linux】信号量,线程池
  • 智能EDA小白从0开始 —— DAY27 第二届设计自动化产业峰会IDAS 2024:比昂芯科技携最新EDA工具链及应用成果亮相
  • 从文化到实践:DevOps的基本概念与核心实践详解
  • 20241023给荣品RD-RK3588-AHD开发板刷荣品预编译的Android12之后使用TDMonitor V2.0.2测试板载GPS
  • Nginx14-Lua基础
  • 【Leecode】Leecode刷题之路第32天之最长有效括号
  • C++ | STL | 侯捷 | 学习笔记
  • 【Qt】控件——Qt输入类控件、常见的输入类控件、输入类控件的使用、Line Edit、Text Edit、Combo Box、Spin Box
  • VUE前端按钮添加遮罩层