Python 读取与处理出入库 Excel 数据实战案例(HTML 网页展示)

devtools/2024/10/8 16:59:44/

有如下数据,需要对数据合并处理,输出到数据库。

数据样例:👇

图片

html" title=excel>excel内容:

出入库统计表河北库.xlsx:

图片

出入库统计表天津库.xlsx:

图片

01实现过程

1、创建test.py文件,然后将下面代码复制到里面,最后运行

html" title=python>python"># 导入必要的库,pandas 用于数据处理,sqlalchemy 用于连接数据库
import pandas as pd
from sqlalchemy import create_enginedef read_html" title=excel>excel_data(file_name):# 读取整个 Excel 文件,header=None 表示不使用第一行作为列名df = pd.read_html" title=excel>excel(file_name, header=None)# 找到服装类和食品类的起始行,使用 df[df[0] == '条件']来筛选特定内容的行,index[0]获取索引,+1 得到起始行的下一行clothing_start = df[df[0] == '1、服装类'].index[0] + 1food_start = df[df[0] == '2、食品类'].index[0] + 1# 读取服装类数据,header 参数指定起始行,nrows 指定读取的行数clothing_df = pd.read_html" title=excel>excel(file_name, header=clothing_start, nrows=2)# 读取食品类数据,同理food_df = pd.read_html" title=excel>excel(file_name, header=food_start, nrows=2)return clothing_df, food_df
# 定义一个函数用于从 Excel 文件中读取特定部分的数据# 读取河北库和天津库的数据
df1_clothing, df1_food = read_html" title=excel>excel_data('出入库统计表河北库.xlsx')
df2_clothing, df2_food = read_html" title=excel>excel_data('出入库统计表天津库.xlsx')
# 调用函数读取两个不同库的服装类和食品类数据# 合并服装类数据,pd.concat 用于连接多个 DataFrame
clothing_combined = pd.concat([df1_clothing, df2_clothing])
clothing_combined['类型'] = '服装类'
# 将两个库的服装类数据合并,并添加类型列# 合并食品类数据,同理
food_combined = pd.concat([df1_food, df2_food])
food_combined['类型'] = '食品类'# 定义列顺序
clothing_columns = ['库房', '类型', '出入库', '男士上衣', '男士下装', '女士上装', '女士下装', '童装','男士内衣', '女士内衣', '运动装', '工作服', '户外服装', '特殊服装', '冬装', '夏装', '合计']
food_columns = ['库房', '类型', '出入库', '酒水', '调料', '肉类', '合计']# 处理服装类数据,reindex 用于重新排列列的顺序
clothing_result = clothing_combined.reindex(columns=clothing_columns)# 处理食品类数据,同理
food_result = food_combined.reindex(columns=food_columns)# 生成 HTML 内容
html_content = f"""
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>2024 年产品出入库统计</title><style>table {{width: 100%;border-collapse: collapse;}}th, td {{border: 1px solid black;padding: 8px;text-align: left;}}th {{background-color: #f2f2f2;}}</style>
</head>
<body><h1>2024 年产品出入库统计</h1><h2>1. 服装类</h2>
<table><thead><tr>{''.join([f'<th>{col}</th>' for col in clothing_columns])}</tr></thead><tbody>{''.join([f'<tr>{" ".join([f"<td>{item}</td>" for item in row])}</tr>' for row in clothing_result.values])}</tbody>
</table><h2>2. 食品类</h2>
<table><thead><tr>{''.join([f'<th>{col}</th>' for col in food_columns])}</tr></thead><tbody>{''.join([f'<tr>{" ".join([f"<td>{item}</td>" for item in row])}</tr>' for row in food_result.values])}</tbody>
</table></body>
</html>
"""
# 使用字符串格式化生成 HTML 内容,包括表格结构和数据# 将 HTML 内容写入文件
with open('output.html', 'w', encoding='utf-8') as file:file.write(html_content)
# 打开文件并写入生成的 HTML 内容# 连接 MySQL 数据库
engine = create_engine('mysql+pymysql://root:root@127.0.0.1:3306/test01')
# 使用 sqlalchemy 创建数据库连接引擎# 将数据写入 MySQL 数据库
clothing_result.to_sql('clothing_table', con=engine, if_exists='replace', index=False)
food_result.to_sql('food_table', con=engine, if_exists='replace', index=False)
# 将处理后的服装类和食品类数据分别写入 MySQL 数据库中的不同表,如果表已存在则替换,并且不写入索引列

02最终结果

1、找到output.html

图片

2、双击output.html运行看到如下结果

图片


http://www.ppmy.cn/devtools/122373.html

相关文章

大厂面试真题-介绍以下Docker的Overlay网络

Overlay网络&#xff0c;又称为叠加网络或覆盖网络&#xff0c;是一种在现有物理网络&#xff08;Underlay网络&#xff09;之上构建的虚拟网络架构。它通过虚拟化技术&#xff0c;在不对基础网络进行大规模修改的条件下&#xff0c;实现应用在网络上的承载&#xff0c;并能与其…

论文阅读笔记-Pre-trained Models for Natural Language Processing: A Survey

前言 预训练模型给下游任务带来的效果不言而喻,有了预训练模型,我们可以使用它来加速解决问题的过程。正如论文中所说的那样,预训练模型(PTMs)的出现将自然语言处理(NLP)带入了一个新时代。本篇论文基于分类从四个角度对现有PTMs进行系统分类,描述如何使PTMs的知识适应…

万界星空科技MES数据集成平台

制造执行系统MES作为连接企业上层ERP系统和现场控制系统的桥梁&#xff0c;承担了实时数据采集、处理、分析和传递的重要任务。MES数据集成平台是一个集成各类数据源&#xff0c;将数据进行整合和统一管理的系统&#xff0c;通过提供标准化接口和协议&#xff0c;实现数据的无缝…

Ubuntu 安装RUST

官方给的是这样如下脚本 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh 太慢了 curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh -x 执行这个脚本后会给出对应的下载链接 如下图 我直接给出来 大多数应该都是这个 https://static.rust-…

Fastjson反序列化

Fastjson反序列化一共有三条利用链 TempLatesImpl&#xff1a;实战中不适用JdbcRowSetImpl&#xff1a;实际运用中较为广泛BasicDataSource&#xff08;BCEL&#xff09; 反序列化核心 反序列化是通过字符串或字节流&#xff0c;利用Java的反射机制重构一个对象。主要有两种…

Android Framework AMS(02)AMS启动及相关初始化5-8

该系列文章总纲链接&#xff1a;专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节主要涉及systemserver启动AMS及初始化AMS相关操作。同时由于该部分内容过多&#xff0c;因此拆成2个章节&#xff0c;本章节是第二章节&…

【FPGA开发】Xilinx FPGA差分输入时钟的使用方法

正文 以前在使用ZYNQ的领航者ZYNQ7020进行FPGA学习时&#xff0c;它们使用的单端50M的输入时钟&#xff0c;在verlog代码编写上比较简单&#xff0c;而现在使用Alinx的AXU3EG开发板时&#xff0c;发现它使用的是200M的差分输入时钟&#xff0c;哪这个时候&#xff0c;输入时钟要…

【分布式微服务云原生】Redis:如何实现高性能与高可用性的终极指南

Redis&#xff1a;如何实现高性能与高可用性的终极指南 摘要 Redis&#xff0c;作为当今最受欢迎的内存数据结构存储系统&#xff0c;以其卓越的性能和高可用性著称。本文将深入探讨Redis背后的底层原理&#xff0c;分析其如何通过内存存储、单线程模型、高效的数据结构、持久…