使用说明
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.smith
2.管道分离值
myapp|production|john.doe
webapp|dev|jane.smith
3.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
- 在macOS/Linux上:
-
安装依赖项
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 <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/
添加新标签格式
- 编辑
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