Excel标签解析工具

一个基于Python的Web应用程序,用于解析大型Excel文件中的标签列,提取结构化信息并支持MongoDB集成和AI分析。

  • by mudakara
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 mudakara/excel-tags-parser-mongodb

使用说明

Excel标签解析器

一个Python应用程序,具有基于web的UI,通过解析“标签”列并将结构化信息提取到单独的列中来处理大型Excel文件(100000+行)。

特性

  • 用户友好的Web界面 使用Streamlit构建
  • 处理大文件 -优化以高效处理100000多行
  • 块状加工 -使用pandas块进行内存高效处理
  • 多种标签格式 -支持多种标签格式(键值、管道分隔、JSON)
  • 实时进度 -处理过程中的实时进度跟踪
  • 下载结果 -轻松下载已处理的文件
  • MongoDB集成 -将数据推送到MongoDB进行仪表板和分析
  • MCP服务器 -使用AI/LLM查询数据库并创建图表
  • 命令行界面 -用于批处理的CLI选项

提取的信息

应用程序读取“标签”列中的每一行并提取:

  1. 应用程序名称
  2. 环境
  3. 所有者

这些值将作为新列添加到已处理的Excel文件中。

支持的标记格式

1.键值对(推荐)

app:myapp,env:production,owner:john.doe
application:webapp,environment:dev,owner:jane.smith

2.管道分离值

myapp|production|john.doe
webapp|dev|jane.smith

3.JSON格式

{"app":"myapp","env":"production","owner":"john.doe"}

安装

先决条件

  • Python 3.9或更高版本
  • pip包管理器

设置

  1. 克隆或下载此存储库

  2. 创建虚拟环境 (推荐)

    python -m venv venv
    
  3. 激活虚拟环境

    • 在macOS/Linux上:
      source venv/bin/activate
      
    • 在Windows上:
      venv\Scripts\activate
      
  4. 安装依赖项

    pip install -r requirements.txt
    

用法

Web界面(推荐)

  1. 启动Streamlit应用程序

    streamlit run src/ui/streamlit_app.py
    
  2. 打开浏览器 -应用程序将在以下时间自动打开 http://localhost:8501

  3. 上传Excel文件 -点击“浏览文件”并选择您的Excel文件

  4. 查看预览 -检查标签列是否被识别

  5. 点击“流程文件” -等待处理完成

  6. 下载结果 -点击“下载已处理文件”

  7. 推送到MongoDB(可选) -点击“推送到MongoDB”为仪表板存储数据

MongoDB集成

该应用程序包括用于存储处理数据的MongoDB集成:

  1. 安装MongoDB -请参阅 MONGODB_SETUP.md 有关安装说明

  2. 启动MongoDB:

    # macOS
    brew services start mongodb-community@7.0
    
    # Linux
    sudo systemctl start mongod
    
  3. 测试连接 -使用侧边栏中的“测试MongoDB连接”按钮

  4. 推送数据 -处理完毕后,点击“推送到MongoDB”按钮

  5. 查看统计信息 -查看数据库统计信息,包括独特的应用程序、环境和所有者

有关详细的MongoDB设置、模式设计和查询指南,请参阅 MONGODB_SETUP.md.

用于AI/LLM集成的MCP服务器

使用AI分析您的数据!MCP(模型上下文协议)服务器允许开源LLM查询MongoDB并创建图表:

  1. 设置MCP服务器:

    cd mcp_server
    pip install -r requirements.txt
    python test_mcp.py  # Verify it works
    
  2. 连接到LLM (LM工作室、克劳德桌面、Continue.dev等)

  3. 问自然语言问题:

    • “显示数据库统计信息”
    • “按环境创建资源柱状图”
    • “哪个所有者拥有最多的资源?”
    • “绘制跨环境应用程序的热图”

看 mcp_server/QUICKSTART.md 有关详细的设置说明。

看 mcp_server/PROMPTS.md 例如提示。

命令行界面

对于批处理或自动化:

python src/app.py <input_file> <output_file>

例子:

python src/app.py data/uploads/myfile.xlsx data/processed/myfile_processed.xlsx

项目结构

excel-tags-parser/
├── src/
│   ├── app.py                 # CLI entry point
│   ├── ui/
│   │   └── streamlit_app.py   # Web UI
│   ├── processor/
│   │   ├── excel_reader.py    # Excel reading with chunking
│   │   ├── tag_parser.py      # Tag parsing logic
│   │   └── excel_writer.py    # Excel writing
│   ├── database/
│   │   ├── mongodb_client.py  # MongoDB connection
│   │   └── mongodb_operations.py  # Data insertion & queries
│   └── utils/
│       └── validators.py      # Input validation
├── mcp_server/                # MCP server for LLM integration
│   ├── mongodb_mcp_server.py  # MCP server implementation
│   ├── requirements.txt       # MCP dependencies
│   ├── QUICKSTART.md          # Quick start guide
│   ├── PROMPTS.md             # Example prompts for LLMs
│   └── test_mcp.py            # Test script
├── data/
│   ├── uploads/               # Temporary uploads (auto-cleaned)
│   └── processed/             # Processed files
├── tests/                     # Test files
├── config.py                  # Configuration settings
├── requirements.txt           # Python dependencies
├── README.md                  # This file
└── MONGODB_SETUP.md           # MongoDB setup guide

配置

编辑 config.py 要自定义设置,请执行以下操作:

# Processing settings
CHUNK_SIZE = 10000              # Rows per chunk
MAX_FILE_SIZE_MB = 500          # Maximum upload size

# Column names
TAG_COLUMN = 'Tags'             # Name of the tags column

# Tag parsing
TAG_SEPARATORS = [',', ';', '|']
KEY_VALUE_SEPARATOR = ':'

# MongoDB settings
MONGODB_URI = 'mongodb://localhost:27017/'
MONGODB_DATABASE = 'azure'
MONGODB_COLLECTION = 'resources'

自定义标记解析

如果您的标签格式不同,请修改 parse_tags() 功能在 src/processor/tag_parser.py.

示例:自定义格式

如果你的标签看起来像: myapp-production-john.doe

将此添加到 parse_tags() 功能:

# Strategy: Dash-separated format
elif '-' in tag_string and tag_string.count('-') >= 2:
    parts = tag_string.split('-')
    result['Application Name'] = parts[0].strip()
    result['Environment'] = parts[1].strip()
    result['Owner'] = parts[2].strip()

演出

  • 10万行:约30-60秒
  • 500K行:约2-4分钟
  • 1M行:~5-8分钟

性能取决于:

  • 文件大小和复杂性
  • 标签格式复杂性
  • 系统规范

故障排除

错误:“找不到列'Tags'”

  • 确保Excel文件有一个名为“标签”的列(区分大小写)
  • 或修改 TAG_COLUMN 在 config.py 以匹配您的列名

错误:“文件大小超过最大值”

  • 增加 MAX_FILE_SIZE_MB 在 config.py

内存问题

  • 减少 CHUNK_SIZE 在 config.py (例如,从10000到5000)

处理速度慢

  • 增加 CHUNK_SIZE 更快的处理速度(使用更多内存)
  • 启用并行处理:设置 ENABLE_PARALLEL_PROCESSING = True 在 config.py

发展

运行测试

pytest tests/

添加新标签格式

  1. 编辑 src/processor/tag_parser.py
  2. 添加新的解析函数(例如。, _parse_custom_format())
  3. 打电话给 parse_tags() 基于检测逻辑
  4. 使用样本数据进行测试

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 添加测试
  5. 提交拉取请求

需求

  • 熊猫>=2.0.0
  • openpyxl>=3.1.0
  • xlrd>=2.0.0
  • 流式照明>=1.28.0
  • python dotenv>=1.0.0
  • pymongo>=4.6.0(用于MongoDB集成)

许可证

本项目按原样提供供内部使用。

支持

对于问题或疑问:

  1. 检查故障排除部分
  2. 查看控制台中的日志
  3. 检查中的示例文件 data/ 目录

工作流示例

  1. 准备Excel文件

    • 确保它有一个“标签”列
    • 标签应遵循支持的格式之一
  2. 运行应用程序

    streamlit run src/ui/streamlit_app.py
    
  3. 上传和处理

    • 上传您的文件
    • 点击“流程文件”
    • 等待完成
  4. 评审结果

    • 检查统计数据
    • 预览解析后的数据
    • 下载已处理的文件
  5. 推送到MongoDB(可选)

    • 点击“推送到MongoDB”按钮
    • 查看数据库统计信息
    • 使用存储的数据创建仪表板
  6. 验证输出

    • 打开下载的文件
    • 检查三个新列:应用程序名称、环境、所有者

高级用法

程序化使用

from src.processor.excel_reader import read_excel_in_chunks
from src.processor.tag_parser import process_dataframe
from src.processor.excel_writer import write_chunks_to_excel

# Process file
processed_chunks = []
for chunk, total in read_excel_in_chunks('input.xlsx'):
    processed_chunk = process_dataframe(chunk)
    processed_chunks.append(processed_chunk)

# Save results
write_chunks_to_excel(processed_chunks, 'output.xlsx')

批量处理多个文件

for file in data/uploads/*.xlsx; do
    python src/app.py "$file" "data/processed/$(basename "$file" .xlsx)_processed.xlsx"
done

备注

  • 已处理的文件保存在 data/processed/ 目录
  • 上传的文件会被临时存储,并在处理后自动清理
  • 输出文件名中的所有时间戳都使用以下格式:YYYYMMDD_HHMMSS
  • 空或格式错误的标记将导致新列中的值为NULL