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"替换为你想要监控的文件夹的实际路径。这个示例仅作为起点,根据你的具体需求,你可能需要调整文件读取逻辑或处理逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值