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

测试data_management函数

测试data_management函数

这是我最近正在开发的AI工具信息平台的部门功能模块测试,基于streamlit架构。整理出来与大家分享,也为我以后自己回溯找到资源。

为了测试 data_management 函数并结合 Excel 文件中的 “Tools” 表单内容,我们需要进行以下步骤:

  1. 确保 Excel 文件准备好:你的 Excel 文件(例如 test_tools.xlsx)应包含相关的工具数据。
  2. 实现 save_all_data 函数:确保有一个函数用于保存数据回 Excel 文件。
  3. 编写完整的测试代码:将 data_management 函数整合到一个 Streamlit 应用中,以便从 Excel 读取数据、执行管理操作并实时展示结果。

步骤 1:准备 Excel 文件

确保你的 Excel 文件 test_tools.xlsx 内容如下:

NameCategoryCountryCompanyDescriptionURLOpen SourcePopularityLastUpdated
通义千问大语言模型中国阿里巴巴阿里云企业级大模型平台https://tongyi.aliyun.com4002024/2/11
智谱清言App大语言模型中国智谱AI新一代认知智能大模型,提供对话、问答等功能https://chatglm.cn/50002025/1/22
Tool A大语言模型USACompany AA great toolhttp://example.com1002023/1/1
Tool B大语言模型CanadaCompany BAnother great toolhttp://example2.com2002023/1/2
Tool C大语言模型UKCompany CAmazing toolhttp://example3.com1502023/1/3

步骤 2:实现 save_all_data 函数

确保你能将数据保存回 Excel 文件。以下是一个简单的示例实现:

def save_all_data(excel_file, tools_data, tutorials_data):"""保存所有数据到 Excel 文件"""with pd.ExcelWriter(excel_file) as writer:# 将工具数据写入工作表for category, items in tools_data.items():df = pd.DataFrame(items)df.to_excel(writer, sheet_name=category, index=False)# 如果有教程数据,也可以保存到对应的工作表if tutorials_data:  # 示例,如果有必要可以添加处理tutorials_df = pd.DataFrame(tutorials_data)tutorials_df.to_excel(writer, sheet_name='Tutorials', index=False)return True

步骤 3:编写完整的 Streamlit 应用代码

data_management 函数整合到一个完整的 Streamlit 应用中,读取 Excel 文件并实现数据的管理功能:

import pandas as pd
import streamlit as st
import datetime# 国家标志示例
COUNTRY_FLAGS = {'中国': '🇨🇳','USA': '🇺🇸','Canada': '🇨🇦','UK': '🇬🇧'
}def save_all_data(excel_file, tools_data, tutorials_data):"""保存所有数据到Excel"""try:tools_rows = []for category, items in tools_data.items():for item in items:tools_rows.append({'Name': item['name'],'Category': category,'Country': item['country'],'Company': item.get('company', ''),'Description': item['description'],'URL': item['url'],'Open Source': item['open_source']})tools_df = pd.DataFrame(tools_rows)tutorials_rows = []for tool_name, tutorials in tutorials_data.items():for tut in tutorials:tutorials_rows.append({'TutorialID': tut['id'],'RelatedTool': tool_name,'Title': tut['title'],'URL': tut['url'],'Type': tut['type'],'DifficultyLevel': tut['difficulty'],'Duration': tut.get('duration', ''),'Rating': tut.get('rating', None),'Language': tut.get('language', '中文'),'Tags': ', '.join(tut.get('tags', [])),'VersionCompatible': tut.get('version', ''),'Author': tut.get('author', '')})tutorials_df = pd.DataFrame(tutorials_rows)with pd.ExcelWriter(excel_file, engine='openpyxl') as writer:tools_df.to_excel(writer, sheet_name='Tools', index=False)tutorials_df.to_excel(writer, sheet_name='Tutorials', index=False)return Trueexcept Exception as e:st.error(f"保存失败:{str(e)}")return Falseclass EnhancedConfig:SERPER_API_KEY = 'your api_key'  # 替换为实际的 API 密钥def render_url(url):"""根据URL生成超链接"""if url and url != '无':return f'<a href="{url}" class="link-btn" target="_blank">{url}</a>'else:return "<span>无可用链接</span>"def classify_tool(name, description):"""模拟分类工具的功能"""return '大语言模型'  # 示例返回def data_management(excel_file, tools_data):# 新增分类验证功能if st.sidebar.button("🔍 分类质量检查"):error_count = 0for category, items in tools_data.items():for item in items:predicted = classify_tool(item['name'], item['description'])if predicted != category:st.warning(f"分类不一致:{item['name']} 当前分类:{category},预测分类:{predicted}")error_count += 1st.info(f"完成检查,发现{error_count}个潜在分类问题")# 数据管理界面st.sidebar.subheader("数据管理")operation = st.sidebar.radio("操作类型", ["添加条目", "编辑条目", "删除分类", "增加分类"])if operation == "添加条目":category = st.selectbox("选择分类", list(tools_data.keys()) + ["新增分类"])if category == "新增分类":category = st.text_input("请输入新分类名称")with st.form("添加表单"):name = st.text_input("工具名称")url = st.text_input("官网URL")country = st.selectbox("所属国家", list(COUNTRY_FLAGS.keys()))company = st.text_input("公司名称")description = st.text_area("工具描述")open_source = st.selectbox("是否开源", ["是", "否"])popularity = st.slider("初始流行度", 500, 2000, 1000)if st.form_submit_button("提交"):if all([category, name, url]):new_item = {'name': name,'url': url,'description': description,'country': country,'open_source': open_source,'company': company,'popularity': popularity,'last_updated': datetime.datetime.now()}if category not in tools_data:tools_data[category] = []tools_data[category].append(new_item)if save_all_data(excel_file, tools_data, {}):  # 假设没有教程数据st.success("添加成功!")else:st.error("请填写必填字段(分类、名称、URL)")elif operation == "编辑条目":category = st.selectbox("选择分类", list(tools_data.keys()))items = tools_data.get(category, [])if items:index = st.selectbox("选择条目", range(len(items)), format_func=lambda x: items[x]['name'])with st.form("编辑表单"):new_category = st.text_input("新分类名称", value=category)name = st.text_input("工具名称", value=items[index]['name'])url = st.text_input("官网URL", value=items[index]['url'])# 确保安全地获取国家try:selected_country_index = list(COUNTRY_FLAGS.keys()).index(items[index]['country'])except ValueError:selected_country_index = 0  # 默认到第一个国家country = st.selectbox("所属国家", list(COUNTRY_FLAGS.keys()), index=selected_country_index)company = st.text_input("公司名称", value=items[index]['company'])description = st.text_area("工具描述", value=items[index]['description'])open_source = st.selectbox("是否开源", ["是", "否"],index=["是", "否"].index(items[index]['open_source']))if st.form_submit_button("保存修改"):del tools_data[category][index]if new_category not in tools_data:tools_data[new_category] = []tools_data[new_category].append({'name': name,'url': url,'description': description,'country': country,'open_source': open_source,'company': company})if not tools_data[category]:del tools_data[category]if save_all_data(excel_file, tools_data, {}):  # 假设没有教程数据st.success("修改已保存!")else:st.warning("该分类下没有条目可供编辑或删除!")elif operation == "增加分类":new_category = st.text_input("请输入新分类名称")if st.button("提交"):if new_category:if new_category not in tools_data:tools_data[new_category] = []save_all_data(excel_file, tools_data, {})st.success(f"分类 '{new_category}' 已成功添加!")else:st.error("该分类已存在,请选择其他名称。")else:st.error("分类名称不能为空。")elif operation == "删除分类":category = st.selectbox("选择分类", list(tools_data.keys()))if st.button("确认删除"):del tools_data[category]if save_all_data(excel_file, tools_data, {}):  # 假设没有教程数据st.success(f"分类 {category} 已删除!")def main():# 从 Excel 文件读取工具数据excel_file = 'test.xlsx'tools_data = {}# 读取 Excel 文件内容df = pd.read_excel(excel_file, sheet_name='Tools')# 构建工具数据字典for _, row in df.iterrows():category = row['Category']if category not in tools_data:tools_data[category] = []tools_data[category].append({'name': row['Name'],'url': row['URL'],'description': row['Description'],'country': row['Country'],'open_source': row['Open Source'],'company': row['Company'],'popularity': row['Popularity'],'last_updated': row['LastUpdated']})data_management(excel_file, tools_data)if __name__ == "__main__":main()

步骤 4:运行测试

将上述代码保存为 Python 文件,例如 data_management_app.py,然后在命令行中运行以下命令:

streamlit run data_management_app.py

验证输出

当应用启动后,你应该能够通过侧边栏操作来:

  • 进行分类质量检查
  • 添加、编辑和删除条目
  • 增加或删除分类

确保在每次操作后正确更新 Excel 文件,并在页面上显示相应的结果和消息。

注意事项

  1. Excel 文件路径:确保 Excel 文件路径正确或与脚本在同一目录下。
  2. 异常处理:在操作中添加异常处理以捕获错误。
  3. 数据有效性检查:确保用户输入的数据格式正确。

通过这些步骤,你应该能够测试 data_management 函数。如果有任何问题或进一步的要求,请随时告诉我!

相关文章:

测试data_management函数

测试data_management函数 这是我最近正在开发的AI工具信息平台的部门功能模块测试&#xff0c;基于streamlit架构。整理出来与大家分享&#xff0c;也为我以后自己回溯找到资源。 为了测试 data_management 函数并结合 Excel 文件中的 “Tools” 表单内容&#xff0c;我们需要…...

微信小程序---计划时钟设计与实现

微信小程序-计划时钟已上线,欢迎各位小伙伴的测试和使用~(微信小程序搜计划时钟即可使用) 在这篇博客中,我们将探讨如何在微信小程序中设计和实现一个任务管理功能,该功能允许用户添加、删除和查看任务。任务管理系统的核心是基于日期和时间的任务管理,可以设置任务的开…...

深度学习之图像回归(二)

前言 这篇文章主要是在图像回归&#xff08;一&#xff09;的基础上对该项目进行的优化。&#xff08;一&#xff09;主要是帮助迅速入门 理清一个深度学习项目的逻辑 这篇文章则主要注重在此基础上对于数据预处理和模型训练进行优化前者会通过涉及PCA主成分分析 特征选择 后…...

深入理解HttpSecurity的设计

一、HttpSecurity的应用 在前章节的介绍中我们讲解了基于配置文件的使用方式,也就是如下的使用。 也就是在配置文件中通过 security:http 等标签来定义了认证需要的相关信息,但是在SpringBoot项目中,我们慢慢脱离了xml配置文件的方式,在SpringSecurity中提供了HttpSecurity…...

15增减字符串匹配(贪心)思路解析+源码

文章目录 题目[](https://leetcode.cn/problems/di-string-match/)算法原理贪心证明源码总结题目 假设s="I D I D"也就是增降增降,在0-4中,每两个数存在这种方式数组为【1, 3,2, 4,0】;(如下图) 算法原理 解法:贪心 1.当遇到“I”:选择当前最小的那个数 2…...

Java NIO与传统IO性能对比分析

Java NIO与传统IO性能对比分析 在Java中&#xff0c;I/O&#xff08;输入输出&#xff09;操作是开发中最常见的任务之一。传统的I/O方式基于阻塞模型&#xff0c;而Java NIO&#xff08;New I/O&#xff09;引入了非阻塞和基于通道&#xff08;Channel&#xff09;和缓冲区&a…...

14.7 LangChain Experimental 模块解析:解锁 Auto-GPT 开发新范式

LangChain Experimental 模块解析:解锁 Auto-GPT 开发新范式 关键词:LangChain Experimental、Auto-GPT 实现、自主智能体开发、Agent 架构设计、实验性功能实践 1. LangChain Experimental 模块的定位与核心能力 模块定位解析: #mermaid-svg-4xz2OlZBUFjkBmqw {font-fami…...

wps中的js开发

严格区分大小写 /*** learn_js Macro*/ function test() {Range(D7).Value2Selection.Value2; // Selection.formula "100" }function Workbook_SheetSelectionChange(Sh, Target) {if(Sh.Name Sheet1) {test();}}function test2() {// 把I4单元格及其周边有数的单…...

day16_推荐系统和总结

文章目录 day16_推荐系统和总结一、推荐实现1、基于流行度推荐&#xff08;掌握&#xff09;1.1 近期热门商品推荐1.2 个人热门商品推荐 2、基于隐语义模型的协同过滤推荐&#xff08;了解&#xff09;2.1 ALS算法介绍2.2 推荐代码 3、基于物品的协同过滤推荐&#xff08;了解&…...

一文说清楚编码、摘要、加密、公钥、私钥、解密、签名、验签

编码 对信息进行编码&#xff0c;没有信息损失&#xff0c;任何人都能通过编码方式对信息进行解码。例如 ASCII 码&#xff0c;base64 编码。 例如下面是 ASCII 编码表&#xff1a; ​ 摘要 对信息计算摘要值&#xff0c;有信息损失&#xff0c;例如 md5 摘要&#xff0c;sh…...

Repeated Sequence

记suma[1]a[2]a[3]...a[n]。 该序列以a[1]&#xff0c;a[2]&#xff0c;a[3]....a[n]为循环节&#xff0c;明显的&#xff0c;问题可转化为:s%sum是否为该序列的某个连续子序列和。 断环为链。将a复制一份。 枚举a[i]为左端点的所有区间的和。再查找s是否存在。二分O&#x…...

CT dicom 去除床板 去除床位,检查床去除

1. 前言 医院拍摄患者CT与MRI 图像&#xff0c; 但是CT图像中就会出现检查床的区域&#xff0c;来看CT扫描设备是什么样子的&#xff0c;红色标出区域 可以在图中看到&#xff0c;在头部位置安装有固定头部的类似支架的东西&#xff0c;这个东西拍摄出来时什么样子呢&#xff…...

react 踩坑记 too many re-renders.

报错信息&#xff1a; too many re-renders. React limits the number of randers to prevent an infinite loop. 需求 tabs只有特定标签页才展示某些按钮 button要用 传递函数引用方式 ()>{} *还有要注意子组件内loading触发 导致的重复渲染...

YOLOv8与BiFormer注意力机制的融合:提升多场景目标检测性能的研究

文章目录 1. YOLOv8的改进背景2. BiFormer注意力机制的核心原理2.1 Bi-level Attention结构2.2 路由策略与加权融合 3. YOLOv8与BiFormer的结合3.1 YOLOv8架构概述3.2 BiFormer与YOLOv8的融合策略 4. 实现代码示例5. 结果分析与实验5.1 数据集与实验设置5.2 实验结果 6. 进一步…...

Ubuntu24.04LTS的下载安装超细图文教程(VMware虚拟机及正常安装)

&#x1f638;个人主页&#x1f449;&#xff1a;神兽汤姆猫 &#x1f4d6;系列专栏&#xff1a;开发语言环境配置 、 Java学习 、Java面试 、Markdown等 学习上的每一次进步&#xff0c;均来自于平时的努力与坚持。 &#x1f495;如果此篇文章对您有帮助的话&#xff0c;请点…...

c++贪心系列

各位小伙伴们新年好呀&#xff0c;这是年后的第一篇文章&#xff0c;那么还是一样&#xff0c;我们继续学习这个贪心算法。 第一题 题目链接 2418. 按身高排序 - 力扣&#xff08;LeetCode&#xff09; 题目解析 代码原理 方法一 1.先创建一个下标数组&#xff0c;将两个数…...

爬虫第七篇数据爬取及解析

这篇博客旨在分享学习过程中的心得和体会&#xff0c;如果有错误请指出&#xff0c;感谢大家。 经过前面的学习&#xff0c;那么我们也就进入了数据爬取的阶段&#xff0c;大家跟着我的步伐一起来学习一下&#xff0c;爬虫的数据爬取与数据解析&#xff08;本篇主要针对于带有…...

LangChain 技术入门指南:探索语言模型的无限可能

在当今的技术领域&#xff0c;LangChain 正逐渐崭露头角&#xff0c;成为开发语言模型应用的强大工具。如果你渴望深入了解并掌握这一技术&#xff0c;那么就跟随本文一起开启 LangChain 的入门之旅吧&#xff01; (后续将持续输出关于LangChain的技术文章,有兴趣的同学可以关注…...

解锁D3.js与PlantUML的交互奥秘:探索知识图谱数据可视化新领域

解锁D3.js与PlantUML的交互魔法&#xff1a;数据可视化新征程 在前端开发的广袤天地里&#xff0c;数据可视化一直是一颗璀璨的明珠&#xff0c;吸引着无数开发者探索其奥秘。而当D3.js这一强大的JavaScript库&#xff0c;遇上专注于创建UML图的PlantUML&#xff0c;一场奇妙的…...

OpenCV机器学习(8)随机森林(Random Forests)算法cv::ml::RTrees类

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::ml::RTrees 是 OpenCV 机器学习模块中的一部分&#xff0c;用于实现随机森林&#xff08;Random Forests&#xff09;算法。随机森林是一种集…...

从路面裂缝到路侧护栏:一套数据集搞定高速公路全场景 AI 巡检 高速公路护栏 防撞护栏检测数据集 路缘石 道路标线 使用 Ultralytics YOLOv8如何训练高速护栏 道路标线数据集

高速公路护栏 防撞护栏检测数据集 路缘石 道路标线类别 该数据集共包含 4 个类别&#xff0c;主要用于道路设施检测&#xff1a; crash_barrier&#xff1a;防撞护栏kerb_stone&#xff1a;路缘石road_markings&#xff1a;道路标线speed_breaker&#xff1a;减速带 数量 图像总…...

5分钟极速转换:m4s-converter无损视频格式转换解决方案

5分钟极速转换&#xff1a;m4s-converter无损视频格式转换解决方案 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否遇到过这样的情况&…...

别再复制官网命令了!手把手教你为MX450显卡(CUDA 11.1)安装正确的PyTorch-GPU版本

别再复制官网命令了&#xff01;手把手教你为MX450显卡&#xff08;CUDA 11.1&#xff09;安装正确的PyTorch-GPU版本 每次看到新手在论坛里抱怨"为什么我的PyTorch-GPU安装后还是显示CPU版本"&#xff0c;我都会想起自己第一次在MX450显卡上踩过的坑。当时我花了整…...

终极DLSS Swapper完全指南:3大核心功能解锁游戏性能新高度

终极DLSS Swapper完全指南&#xff1a;3大核心功能解锁游戏性能新高度 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS Swapper作为一款专为游戏玩家设计的开源工具&#xff0c;彻底改变了玩家管理NVIDIA DLSS、AM…...

探索几何交易的未来:基于TradingView本地SDK的缠论可视化革命

探索几何交易的未来&#xff1a;基于TradingView本地SDK的缠论可视化革命 【免费下载链接】chanvis 基于TradingView本地SDK的可视化前后端代码&#xff0c;适用于缠论量化研究&#xff0c;和其他的基于几何交易的量化研究。 缠论量化 摩尔缠论 缠论可视化 TradingView TV-SDK …...

蓝桥杯嵌入式备赛:用STM32和LCD玩转界面切换,别再只会if-else了

蓝桥杯嵌入式竞赛进阶&#xff1a;状态机驱动LCD界面切换实战 在嵌入式系统开发中&#xff0c;界面管理一直是初学者最容易陷入"if-else地狱"的重灾区。特别是参加蓝桥杯这类竞赛时&#xff0c;面对Data/Para界面切换与自动/手动模式组合的场景&#xff0c;传统标志位…...

告别混乱调度:用DolphinScheduler + Docker Compose快速搭建个人数据工作流测试环境

告别混乱调度&#xff1a;用DolphinScheduler Docker Compose快速搭建个人数据工作流测试环境 在数据工程领域&#xff0c;工作流调度系统如同交响乐团的指挥&#xff0c;协调着各个数据处理任务的执行节奏。传统部署方式往往需要耗费大量时间在环境配置和依赖管理上&#xff…...

HALCON图像与OpenCV/Numpy互转实战:打通Python视觉算法流水线的关键一步

HALCON图像与OpenCV/Numpy互转实战&#xff1a;打通Python视觉算法流水线的关键一步 工业视觉领域长期存在一个技术痛点&#xff1a;HALCON在传统机器视觉算法上的卓越性能与OpenCV/PyTorch等通用框架难以无缝协作。我曾在一个半导体缺陷检测项目中&#xff0c;需要将HALCON的亚…...

别再模拟IIC了!用STM32F103C8T6的硬件IIC驱动AT24C64,CubeMX配置+避坑指南

从模拟IIC到硬件IIC&#xff1a;STM32F103C8T6驱动AT24C64的实战进阶指南 在嵌入式开发中&#xff0c;IIC总线因其简洁的两线制设计&#xff08;SCL时钟线和SDA数据线&#xff09;而广受欢迎。然而&#xff0c;许多开发者习惯使用GPIO模拟IIC时序&#xff0c;这种方式虽然灵活&…...

如何专业配置游戏优化工具:DLSS Swapper终极性能提升指南

如何专业配置游戏优化工具&#xff1a;DLSS Swapper终极性能提升指南 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS Swapper是一款专为游戏玩家设计的显卡性能优化工具&#xff0c;通过智能管理DLSS、FSR和XeSS超…...