Excel标签解析器
一个Python应用程序,具有基于web的UI,通过解析“标签”列并将结构化信息提取到单独的列中来处理大型Excel文件(100000+行)。
特性
- 用户友好的Web界面 使用Streamlit构建
- 处理大文件 -优化以高效处理100000多行
- 块状加工 -使用pandas块进行内存高效处理
- 多种标签格式 -支持多种标签格式(键值、管道分隔、JSON)
- 实时进度 -处理过程中的实时进度跟踪
- 下载结果 -轻松下载已处理的文件
- MongoDB集成 -将数据推送到MongoDB进行仪表板和分析
- MCP服务器 -使用AI/LLM查询数据库并创建图表
- 命令行界面 -用于批处理的CLI选项
提取的信息
应用程序读取“标签”列中的每一行并提取:
- 应用程序名称
- 环境
- 所有者
这些值将作为新列添加到已处理的Excel文件中。
支持的标记格式
1.键值对(推荐)
app:myapp,env:production,owner:john.doe
application:webapp,environment:dev,owner:jane.smith2.管道分离值
myapp|production|john.doe
webapp|dev|jane.smith3.JSON格式
{"app":"myapp","env":"production","owner":"john.doe"}安装
先决条件
- Python 3.9或更高版本
- pip包管理器
设置
- 克隆或下载此存储库
- 创建虚拟环境 (推荐)
python -m venv venv- 激活虚拟环境
- 在macOS/Linux上:
source venv/bin/activate- 在Windows上:
venv\Scripts\activate- 安装依赖项
pip install -r requirements.txt用法
Web界面(推荐)
- 启动Streamlit应用程序
streamlit run src/ui/streamlit_app.py- 打开浏览器 -应用程序将在以下时间自动打开
http://localhost:8501
- 上传Excel文件 -点击“浏览文件”并选择您的Excel文件
- 查看预览 -检查标签列是否被识别
- 点击“流程文件” -等待处理完成
- 下载结果 -点击“下载已处理文件”
- 推送到MongoDB(可选) -点击“推送到MongoDB”为仪表板存储数据
MongoDB集成
该应用程序包括用于存储处理数据的MongoDB集成:
- 安装MongoDB -请参阅 MONGODB_SETUP.md 有关安装说明
- 启动MongoDB:
# macOS
brew services start mongodb-community@7.0
# Linux
sudo systemctl start mongod- 测试连接 -使用侧边栏中的“测试MongoDB连接”按钮
- 推送数据 -处理完毕后,点击“推送到MongoDB”按钮
- 查看统计信息 -查看数据库统计信息,包括独特的应用程序、环境和所有者
有关详细的MongoDB设置、模式设计和查询指南,请参阅 MONGODB_SETUP.md.
用于AI/LLM集成的MCP服务器
使用AI分析您的数据!MCP(模型上下文协议)服务器允许开源LLM查询MongoDB并创建图表:
- 设置MCP服务器:
cd mcp_server
pip install -r requirements.txt
python test_mcp.py # Verify it works- 连接到LLM (LM工作室、克劳德桌面、Continue.dev等)
- 问自然语言问题:
- “显示数据库统计信息” - “按环境创建资源柱状图” - “哪个所有者拥有最多的资源?” - “绘制跨环境应用程序的热图”
看 mcp_server/QUICKSTART.md 有关详细的设置说明。
看 mcp_server/PROMPTS.md 例如提示。
命令行界面
对于批处理或自动化:
python src/app.py 例子:
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/添加新标签格式
- 编辑
src/processor/tag_parser.py - 添加新的解析函数(例如。,
_parse_custom_format()) - 打电话给
parse_tags()基于检测逻辑 - 使用样本数据进行测试
贡献
- 分叉存储库
- 创建要素分支
- 进行更改
- 添加测试
- 提交拉取请求
需求
- 熊猫>=2.0.0
- openpyxl>=3.1.0
- xlrd>=2.0.0
- 流式照明>=1.28.0
- python dotenv>=1.0.0
- pymongo>=4.6.0(用于MongoDB集成)
许可证
本项目按原样提供供内部使用。
支持
对于问题或疑问:
- 检查故障排除部分
- 查看控制台中的日志
- 检查中的示例文件
data/目录
工作流示例
- 准备Excel文件
- 确保它有一个“标签”列 - 标签应遵循支持的格式之一
- 运行应用程序
streamlit run src/ui/streamlit_app.py- 上传和处理
- 上传您的文件 - 点击“流程文件” - 等待完成
- 评审结果
- 检查统计数据 - 预览解析后的数据 - 下载已处理的文件
- 推送到MongoDB(可选)
- 点击“推送到MongoDB”按钮 - 查看数据库统计信息 - 使用存储的数据创建仪表板
- 验证输出
- 打开下载的文件 - 检查三个新列:应用程序名称、环境、所有者
高级用法
程序化使用
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
