Python可以有这种操作!

简介:

今天突然接到了媳妇儿的紧急求助电话,让我帮她弄一个表格。原来中秋节要到了,媳妇儿单位准备给员工发福利,福利分4个档次,不同的福利包含的东西不尽相同,每个部门的员工都有不同档次的福利,现在已经有了两个Excel表格,一个表格是每个员工发放哪个档次的福利,另一个表格是每个档次的福利包含什么东西,单位领导让我媳妇儿她们部门统计一下每个部门分别要买多少东西,汇总到一个表格上面,然后去采购。

现有的表格长这样:

7a94b1b3513513240850bc030317b66e6e2e5c18

最后一栏的备注中的数字就是该员工应得的福利的档次。

42cd52a51df515e5f029d3b661e72ba65955d2c2


这张表格说明了每个档次的福利所包含的东西,1档福利是500元标准,2档福利是300元标准……以此类推。 最后单位领导想要的表格就是下面这样的,这是我最后做出的成果的截图,显示了每个部门分别要买多少东西:

af2cde379375369cebaa6e2a9ebfb3dca8f9a189


那么我是如何做到的呢? 听媳妇描述完情况之后,我第一反应就是可以用Python来做这件事。事实证明,Python并没有让我失望。在这个过程中,我用到了两个Python的模块,一个是用来读Excel文件的xlrd,另一个是用来向Excel文件中写入数据的xlsxwriter。

 

import xlrd
import xlsxwriter

首先获取两个Excel文件对象:

 

workbook1 = xlrd.open_workbook(r'details.xlsx') #这是第一张表
workbook2 = xlrd.open_workbook(r'plan.xlsx') #这是第二张表

sheet3 = workbook1.sheet_by_name('Sheet3') #第一张表的sheet
sheet1 = workbook2.sheet_by_name('Sheet1') #第二张表的sheet

然后读入第一个表中的部门和备注信息,每一条员工的所属部门和备注组成一个元组。

 

cols_bumen = sheet3.col_values(2)
cols_beizhu = sheet3.col_values(7)

res = list(zip(cols_bumen, cols_beizhu))

res = res[2:len(res)] #前两行是表头,我们所需信息从第三行开始

读入第二个表中的礼品信息。

 

lipin = [[],
["喜盛隆月饼","胡姬花花生油","黄河口大闸蟹","大米","后腿老腊肉","五花老腊肉","酱醋精装组合"],
["怡青源月饼8*100g","大米","酱醋精装组合","胡姬花花生油","后腿老腊肉","茶叶","五花老腊肉"],
["怡青源月饼8*100g","大米","猕猴桃","龙大花生油","面粉"],
["怡青源月饼8*100g","大米","后腿老腊肉"]]

lipin_list = ['五花老腊肉', '龙大花生油', '酱醋精装组合', '大米', '猕猴桃', '怡青源月饼8*100g',
'喜盛隆月饼', '后腿老腊肉', '黄河口大闸蟹', '茶叶', '胡姬花花生油', '面粉']

创建一个字典huizong,key是部门名,值是一个列表,列表中包含该部门所需的全部商品,假设需要两袋大米,那么列表中就会有两个“大米”。 最终字典的内容应该类似这样:

 

{'高层管理':['大米', '大米', '喜盛隆月饼'], '文化产业部':['茶叶', '茶叶', '五花老腊肉', '五花老腊肉']}

要做到这一点,我们需要遍历res

 

for i in res:
bumen = i[0] #获取部门名
lipin_level = int(i[1]) #获取该员工的福利档次
if huizong.get(bumen) == None: #如果字典中不存在这个键值对,就创建一个
huizong[bumen] = []
huizong[bumen].extend(lipin[lipin_level]) #在列表中添加对应的礼品名

最后遍历这个字典,把每个部门中的不同的商品数量通过list的count方法计算出来,将数据写到Excel表中,就大功告成了。


完整代码如下:

 

import xlrd
import xlwt
import xlsxwriter

workbook1 = xlrd.open_workbook(r'details.xlsx')
workbook2 = xlrd.open_workbook(r'plan.xlsx')

sheet3 = workbook1.sheet_by_name('Sheet3')
sheet1 = workbook2.sheet_by_name('Sheet1')

linpin = sheet1.col_values(1)
lipin = [[],
["喜盛隆月饼","胡姬花花生油","黄河口大闸蟹","大米","后腿老腊肉","五花老腊肉","酱醋精装组合"],
["怡青源月饼8*100g","大米","酱醋精装组合","胡姬花花生油","后腿老腊肉","茶叶","五花老腊肉"],
["怡青源月饼8*100g","大米","猕猴桃","龙大花生油","面粉"],
["怡青源月饼8*100g","大米","后腿老腊肉"]]

lipin_list = ['五花老腊肉', '龙大花生油', '酱醋精装组合', '大米', '猕猴桃', '怡青源月饼8*100g',
'喜盛隆月饼', '后腿老腊肉', '黄河口大闸蟹', '茶叶', '胡姬花花生油', '面粉']

cols_bumen = sheet3.col_values(2)
cols_beizhu = sheet3.col_values(7)

res = list(zip(cols_bumen, cols_beizhu))

res = res[2:len(res)]

huizong = {'高层管理':[]}

for i in res:
bumen = i[0]
lipin_level = int(i[1])
if huizong.get(bumen) == None:
huizong[bumen] = []
huizong[bumen].extend(lipin[lipin_level])

result = xlsxwriter.Workbook('result.xlsx')
worksheet = result.add_worksheet()
for i in range(0, len(lipin_list)):
worksheet.write(chr(66 + i) + '1', str(lipin_list[i]))

bumen = []
for i in res:
if bumen.count(i[0]) == 0:
bumen.append(i[0])

for i in range(0, len(bumen)):
worksheet.write('A{0}'.format(2+i), str(bumen[i]))

alphaBet = 66
number = 2
j = 0
for key in huizong:
count = 0
for i in range(0, len(lipin_list)):
count = huizong[key].count(lipin_list[i])
worksheet.write('{0}{1}'.format(chr(alphaBet+i), number+j), count)
j += 1

result.close()

原文发布时间为:2018-09-24

本文作者:王浩

本文来自云栖社区合作伙伴“Python爱好者社区”,了解相关信息可以关注“Python爱好者社区”。

相关文章
|
6月前
|
存储 监控 数据处理
💻Python高手必备!文件系统操作秘籍,让你的数据存取如臂使指
【7月更文挑战第29天】在数据驱动时代, Python以简洁语法、丰富库生态和强大跨平台能力, 成为数据科学等领域首选。本文探讨Python文件系统操作秘籍, 助力高效数据处理。
56 11
|
6月前
|
索引 Python
Python的列表操作有哪些?
Python的列表操作非常丰富,包括列表的创建、元素的访问、修改、添加、删除、切片、排序等多个方面。
55 12
|
6月前
|
监控 网络协议 网络安全
SMTP操作使用详解并通过python进行smtp邮件发送示例
SMTP操作使用详解并通过python进行smtp邮件发送示例
174 3
|
6月前
|
数据挖掘 数据处理 Python
🔍深入Python系统编程腹地:文件系统操作与I/O管理,打造高效数据处理流水线
【7月更文挑战第29天】深入Python系统编程腹地:文件系统操作与I/O管理,打造高效数据处理流水线
45 3
|
6月前
|
安全 数据安全/隐私保护 Python
|
6月前
|
Serverless 语音技术 开发工具
函数计算操作报错合集之怎么何集成nls tts python sdk
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
6月前
|
API Python
Python高手修炼手册:精通文件系统操作,掌控I/O管理,提升编程效率
【7月更文挑战第30天】在 Python 编程中, 文件系统操作与 I/O 管理是连接程序与数据的关键。初学者常因路径错误和权限问题受挫, 而高手能自如管理文件。传统 `os` 和 `os.path` 模块易出错, `pathlib` 提供了更直观的对象导向 API。I/O 方面, 同步操作会阻塞程序, 异步 (如使用 `aiofiles`) 则能大幅提升并发能力。真正的高手不仅掌握 API, 更能预见性能瓶颈并优化代码, 实现高效与优雅。
50 1
|
6月前
|
SQL 分布式计算 DataWorks
DataWorks操作报错合集之重新上传后只有SQL无法运行,而Python可以正常运行,是什么导致的
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
6月前
|
Python