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

embedded/2024/10/15 8:04:47/

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

数据样例:👇

图片

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/embedded/119408.html

相关文章

EI会议推荐-往届已检索|第二届智能电网与电力系统国际会议(ICSGPS 2025)

第二届智能电网与电力系统国际会议&#xff08;ICSGPS 2025&#xff09;由上海交通大学、广西大学、武汉大学、武汉理工大学、湖南大学、中南大学、爱迩思出版社、ESBK学术中心联合支持&#xff0c;于2025年1月17日-20日在中国武汉举行。在本次会议上发表的文章将会被本次会议所…

深入解析Debian与Ubuntu:技术特点与用户使用指南

深入解析Debian与Ubuntu&#xff1a;技术特点与用户使用指南 引言 Debian和Ubuntu作为两大知名的Linux发行版&#xff0c;不仅在历史和理念上有所不同&#xff0c;在技术特点和用户使用方法上也各具特色。本文将深入解析它们的技术特点&#xff0c;并提供用户使用指南&#x…

小程序-使用npm包

小程序对 npm 的支持与限制 目前&#xff0c;小程序中已经支持使用 npm 安装第三方包&#xff0c;从而来提高小程序的开发效率。但是&#xff0c;在小程序中使用 npm 包有如下 3 个限制&#xff1a; 不支持依赖于 Node.js 内置库的包不支持依赖于浏览器内置对象的包不支持依赖…

如何区分这个ip是真实ip,不是虚假的ip

区分一个IP地址是真实IP还是虚假IP&#xff08;伪造IP&#xff09;是非常重要的&#xff0c;特别是在网络安全、数据采集和其他与IP相关的业务场景中。虚假IP&#xff08;也称为伪造IP或假冒IP&#xff09;可以通过多种方式被创建&#xff0c;如代理、VPN、或IP欺骗&#xff08…

【Godot4.3】自定义数列类NumList

概述 数列是一种特殊数组。之前写过等比、等差数列、斐波那契等数列的求取函数。今天就汇总到一起&#xff0c;并添加其他的一些数列&#xff0c;比如平方数、立方数、三角形数等。 这里我首先采用以前比较喜欢的静态函数库的写法&#xff0c;然后在其基础上改进为基于类继承…

【HarmonyOS】应用权限原理和封装

背景 在项目中&#xff0c;避免不了需要调用系统资源和系统能力&#xff0c;比如&#xff1a;日历读写、摄像头等。因此&#xff0c;需要了解对系统资源访问权限的申请方式方法。 授权方式 包括两种授权方式&#xff0c;分别是system_grant(系统授权) 和 user_grant(用户授权)…

【Linux基础IO】Linux IO编程入门:揭秘动态库与静态库的秘密

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;Linux “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;Linux Shell &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀Linux基础IO &#x1f4d2;1. …

【Kubernetes】常见面试题汇总(四十六)

目录 104.假设一家基于整体架构的公司处理许多产品。现在&#xff0c;随着公司在当今规模化行业中的发展&#xff0c;其整体架构开始引起问题。您如何看待公司从单一服务转向微服务并部署其服务容器&#xff1f; 105.考虑一家拥有非常分散的系统&#xff0c;拥有大量数据中心&…