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

Python实现文件夹监控:自动捕获并处理新增Excel文件,支持子文件夹遍历

在Python中,监控文件夹中文件的新增情况,包括子文件夹中的文件,可以通过多种方式实现。一个常见的方法是使用watchdog库,它是一个轻量级的Python API和shell实用程序,用于监控文件系统事件。以下是一个使用watchdog来监控文件夹及其子文件夹中新增Excel文件的示例。

首先,你需要安装watchdog库,如果你还没有安装,可以通过pip安装:

【bash】

pip install watchdog

然后,你可以使用以下代码来监控指定文件夹及其子文件夹中的文件变化,并自动读取新增的Excel文件(这里使用pandas库来读取Excel文件,如果你还没有安装pandas和openpyxl,也需要安装它们来支持Excel文件的读取):

【bash】

 pip install pandas openpyxl

接下来是示例代码:

【python】 

import os
import pandas as pd
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

class MyHandler(FileSystemEventHandler):
    def on_created(self, event):

        """处理创建新文件的事件"""
        if event.is_directory:
            return # 忽略目录创建事件

        # 检查文件是否为Excel文件
        if event.src_path.lower().endswith(('.xls', '.xlsx')):
            print(f"检测到新文件: {event.src_path}")
            # 读取Excel文件

            try:
                df = pd.read_excel(event.src_path)
                print(f"读取了Excel文件 {event.src_path} 的前五行:")
                print(df.head())
            except Exception as e:
                print(f"读取文件 {event.src_path} 出错: {e}")

if __name__ == "__main__":

    path = "/path/to/watch" # 需要监控的文件夹路径
    event_handler = MyHandler()
    observer = Observer()
    observer.schedule(event_handler, path, recursive=True) # 递归监控子文件夹
    observer.start()

    try:
        while True:
            # 保持主线程运行,防止程序直接退出
            pass

    except KeyboardInterrupt:
        observer.stop()
    observer.join()

代码解释:

1. MyHandler类:这个类继承自FileSystemEventHandler,并重写了on_created方法。当检测到文件创建事件时,会检查该文件是否是Excel文件(通过文件扩展名),如果是,则使用pandas读取该文件,并打印出文件的前五行。

2. 设置监控:在ifname== "main":块中,设置要监控的文件夹路径path,创建MyHandler的实例,并使用Observer来调度这个处理器。recursive=True参数表示监控会递归地包括子文件夹。

3. 启动和停止监控:使用observer.start()来启动监控。主循环保持程序运行,直到用户按下Ctrl+C(KeyboardInterrupt),然后停止并等待所有事件处理完毕(observer.join())。

请确保将"/path/to/watch"替换为你想要监控的文件夹的实际路径。这个示例仅作为起点,根据你的具体需求,你可能需要调整文件读取逻辑或处理逻辑。

相关文章:

  • AI赋能铁道安全巡检探索智能巡检新时代,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建铁路轨道场景下轨道上人员行为异常检测预警系统
  • 高中物理-基础知识1
  • 【3.Git与Github的历史和区别】
  • Spring Boot 原理分析
  • 打靶记录29——dawn
  • 红队视角出发的k8s敏感信息收集——持久化存储与数据泄露
  • 达梦:跟踪日志诊断
  • 备战蓝桥杯 Day2 枚举 Day3 进制转换
  • 2024 StoryDiffusion 文字/文字+图像----->视频
  • 系统不是基于UEFI的win11,硬盘格式MBR,我如何更改为GPT模式添加UEFI启动?
  • 【C++】RBTree(红黑树)模拟实现
  • 【第4章:循环神经网络(RNN)与长短时记忆网络(LSTM)— 4.4 文本分类与情感分析】
  • 【VB语言】EXCEL中VB宏的应用
  • vscode怎么更新github代码
  • 怎么理解 Spring Boot 的约定优于配置 ?
  • pg_sql关于时间的函数
  • npm运行Vue项目报错 error:0308010c:digital envelope routines::unsupported
  • 新用户冷启动阶段使用的推荐算法策略
  • 小红书图文笔记批量制作
  • C#上位机--基本数据类型
  • 上市不足一年,吉利汽车拟私有化极氪并合并:整合资源,杜绝重复投入
  • 谢晖不再担任中超长春亚泰队主教练:战绩不佳主动请辞
  • 吴清:创造条件支持优质中概股企业回归内地和香港股市
  • 公安部:“五一”假期全国社会大局稳定,治安秩序良好
  • 视觉周刊|劳动开创未来
  • 人民日报今日谈:坚决克服麻痹思想,狠抓工作落实