Python自动化:批量处理Excel,按要求筛选出数据并存到新表
off999 2024-12-17 15:43 17 浏览 0 评论
摘要: 你是否曾被重复的数据筛选工作折磨得筋疲力尽。现在,借助Python自动化工具,仅需几秒钟就能完成原本需要上千分钟的工作量,彻底告别了枯燥与低效!
引言
在仓库管理这个看似平凡却又充满挑战的岗位上,微信公众号粉丝小李担任着仓库主管的角色。每月,他都要执行一项看似简单却极其繁琐的任务:从过去几年的每月物品领用表中筛选出老板需要的数据,比如:领用数量大于1000的物品信息。这不仅是一项重复性极高的工作,而且手工操作一次表格就需要几分钟,每年的数据表都是按月存储的,操作一年的数据表就需要重复操作12次,而十年的数据就需要重复120次,耗费的时间累积起来高达上千分钟。
1.小李的挑战
小李在后台留言中描述了他的困境:“每年的数据表我都需要重复操作12次,十年的数据就是120次。这不仅让我感到疲惫,而且效率极低,手工操作一次表格就需要几分钟,累计起来就是上千分钟。”
2.传统方法的局限
在没有自动化工具辅助的情况下,小李的工作流程是这样的:
- 打开每个Excel文件,逐月查找领用数量。
- 手动筛选出领用数量大于1000的物品信息。
- 复制这些信息并粘贴到新的Excel表中。
- 保存并关闭每个文件,然后重复这个过程。
这个过程不仅耗时,而且容易出错,特别是当数据量庞大时,小李需要保持高度的专注力以避免遗漏或错误。
3.Python自动化的解决方案
我们为小李提供了一个Python脚本,这个脚本能够自动按条件筛选数据并保存到新的Excel里。使用pandas库,我们可以快速读取、筛选并合并数据。
import os
from openpyxl import load_workbook
import pandas as pd
from openpyxl.styles import Border, Side, PatternFill, Font, GradientFill, Alignment
def extract_and_select_data(folder_path, dest_dir):
try:
for filename in os.listdir(folder_path):
if filename.endswith('.xlsx'):
src = os.path.join(folder_path, filename)
os.makedirs(dest_dir, exist_ok=True)
dest_file = os.path.join(dest_dir, filename)
wb = load_workbook(src)
data = {} # 储存所有工作表中满足条件的数据,以工作表名称为键
sheet_names = wb.sheetnames
for sheet_name in sheet_names:
ws = wb[sheet_name]
qty_list = []
# 获取G列的数据,并用enumrate给其对应的元素编号
for row in range(2, ws.max_row+1):
qty = ws['G'+str(row)].value
qty_list.append(qty)
qty_idx = list(enumerate(qty_list)) # 用于编号
# 判断数据是否大于1000,然后返回大于1000的数据所对应的行数
row_idx = [] # 用于储存数量大于1000所对应的的行号
for i in range(len(qty_idx)):
if qty_idx[i][1] > 1000:
row_idx.append(qty_idx[i][0]+2)
# 获取满足条件的数据
data_morethan1K = []
for i in row_idx:
data_morethan1K.append(
ws['A'+str(i)+":"+'I'+str(i)])
data[sheet_name] = data_morethan1K
thin = Side(border_style="thin",
color="000000") # 定义边框粗细及颜色
wb = load_workbook("模板.xlsx")
ws = wb.active
for month in data.keys():
ws_new = wb.copy_worksheet(ws) # 复制模板中的工作表
ws_new.title = month
# 将每个月的数据条数逐个取出并写入新的工作表
# 按数据行数计数,每行数据对应9列,所以每行需分别写入9个单元格
for i in range(len(data[month])):
ws_new.cell(
row=i+2, column=1).value = data[month][i][0][0].value
ws_new.cell(
row=i+2, column=2).value = data[month][i][0][1].value
ws_new.cell(
row=i+2, column=3).value = data[month][i][0][2].value
ws_new.cell(
row=i+2, column=4).value = data[month][i][0][3].value.date()
ws_new.cell(
row=i+2, column=5).value = data[month][i][0][4].value
ws_new.cell(
row=i+2, column=6).value = data[month][i][0][5].value
ws_new.cell(
row=i+2, column=7).value = data[month][i][0][6].value
ws_new.cell(
row=i+2, column=8).value = data[month][i][0][7].value
ws_new.cell(
row=i+2, column=9).value = data[month][i][0][8].value
# 设置字号,对齐,缩小字体填充,加边框
# Font(bold=True)可加粗字体
for row_number in range(2, ws_new.max_row+1):
for col_number in range(1, 10):
c = ws_new.cell(
row=row_number, column=col_number)
c.font = Font(size=10)
c.border = Border(
top=thin, left=thin, right=thin, bottom=thin)
c.alignment = Alignment(
horizontal="left", vertical="center", shrink_to_fit=True)
wb.save(dest_file)
except Exception as e:
print(e)
if __name__ == "__main__":
import time
s_t = time.time()
extract_and_select_data("data", "历年领料数量大于1K")
e_t = time.time()
print(f"用时{e_t-s_t}s")
4.效果展示
通过上述脚本,小李现在可以在20秒钟内完成之前需要上千分钟的工作。这个自动化工具不仅提高了效率,还减少了因手动操作导致的错误。更重要的是,它让小李能够将更多的时间和精力投入到更有创造性和战略性的工作上。
结语
Python自动化不仅仅是编程技巧的展示,更是一种工作方式的革新。它能够帮助我们从重复性劳动中解放出来,让我们有更多时间去做更有创造性的工作。小李的故事证明了自动化的力量,希望他的经历能够激励更多的人去探索和利用Python自动化办公的无限可能。
如果你也像小李一样,面临着重复性工作的苦恼,或者对Python脚本的编写有任何疑问,欢迎在评论区留言,我们将为你提供一对一的技术支持!
本文为原创技术文章,转载请标明出处。如果你喜欢本文,别忘了点赞、转发和关注我们的公众号,获取更多技术干货!
数海丹心
大数据和人工智能知识分享与应用
132篇原创内容
公众号
相关推荐
- 推荐一款Python的GUI可视化工具(python 可视化工具)
-
在Python基础语法学习完成后,进一步开发应用界面时,就需要涉及到GUI了,GUI全称是图形用户界面(GraphicalUserInterface,又称图形用户接口),采用图形方式显示的计算机操...
- 教你用Python绘制谷歌浏览器的3种图标
-
前两天在浏览matplotlib官方网站时,笔者无意中看到一个挺有意思的图片,就是用matplotlib制作的火狐浏览器的logo,也就是下面这个东东(网页地址是https://matplotlib....
- 小白学Python笔记:第二章 Python安装
-
Windows操作系统的python安装:Python提供Windows、Linux/UNIX、macOS及其他操作系统的安装包版本,结合自己的使用情况,此处仅记录windows操作系统的python...
- Python程序开发之简单小程序实例(9)利用Canvas绘制图形和文字
-
Python程序开发之简单小程序实例(9)利用Canvas绘制图形和文字一、项目功能利用Tkinter组件中的Canvas绘制图形和文字。二、项目分析要在窗体中绘制图形和文字,需先导入Tkinter组...
- 一文吃透Python虚拟环境(python虚拟环境安装和配置)
-
摘要在Python开发中,虚拟环境是一种重要的工具,用于隔离不同项目的依赖关系和环境配置。本文将基于windows平台介绍四种常用的Python虚拟环境创建工具:venv、virtualenv、pip...
- 小白也可以玩的Python爬虫库,收藏一下
-
最近,微软开源了一个项目叫「playwright-python」,作为一个兴起项目,出现后受到了大家热烈的欢迎,那它到底是什么样的存在呢?今天为你介绍一下这个传说中的小白神器。Playwright是...
- python环境安装+配置教程(python安装后怎么配置环境变量)
-
安装python双击以下软件:弹出一下窗口需选择一些特定的选项默认选项不需要更改,点击next勾选以上选项,点击install进度条安装完毕即可。到以下界面,证明安装成功。接下来安装库文件返回电脑桌面...
- colorama,一个超好用的 Python 库!
-
大家好,今天为大家分享一个超好用的Python库-colorama。Github地址:https://github.com/tartley/coloramaPythoncolorama库是一...
- python制作仪表盘图(python绘制仪表盘)
-
今天教大家用pyecharts画仪表盘仪表盘(Gauge)是一种拟物化的图表,刻度表示度量,指针表示维度,指针角度表示数值。仪表盘图表就像汽车的速度表一样,有一个圆形的表盘及相应的刻度,有一个指针...
- 总结90条写Python程序的建议(python写作)
-
1.首先 建议1、理解Pythonic概念—-详见Python中的《Python之禅》 建议2、编写Pythonic代码 (1)避免不规范代码,比如只用大小写区分变量、使用容易...
- [oeasy]python0137_相加运算_python之禅_import_this_显式转化
-
变量类型相加运算回忆上次内容上次讲了是从键盘输入变量input函数可以有提示字符串需要有具体的变量接收输入的字符串输入单个变量没有问题但是输入两个变量之后一相加就非常离谱添加图片注释,不超过1...
- Python入门学习记录之一:变量(python中变量的规则)
-
写这个,主要是对自己学习python知识的一个总结,也是加深自己的印象。变量(英文:variable),也叫标识符。在python中,变量的命名规则有以下三点:>变量名只能包含字母、数字和下划线...
- 掌握Python的"魔法":特殊方法与属性完全指南
-
在Python的世界里,以双下划线开头和结尾的"魔法成员"(如__init__、__str__)是面向对象编程的核心。它们赋予开发者定制类行为的超能力,让自定义对象像内置类型一样优雅工...
- 11个Python技巧 不Pythonic 实用大于纯粹
-
虽然Python有一套强大的设计哲学(体现在“Python之禅”中),但总有一些情况需要我们“打破规则”来解决特定问题。这触及了Python哲学中一个非常核心的理念:“实用主义胜于纯粹主义”...
- Python 从入门到精通 第三课 诗意的Python之禅
-
导言:Python之禅,英文名是TheZenOfPython。最早由TimPeters在Python邮件列表中发表,它包含了影响Python编程语言设计的20条软件编写原则。它作为复活节彩蛋...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python字典遍历 (54)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (60)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)