Python新世界python热爱者

想获得老板的赏识?把重复的Excel表格整理工作交给Python

2018-11-18  本文已影响1人  48e0a32026ae

Brief

通过Excel文件读取,DataFrame数据处理,自动完成繁琐无趣的表格整理工作,最后借助Pyinstaller生成可执行文件,以便在没有Python环境的Windows电脑运行。

1

我工作所在的团队,小朋友D的每一天都以一件繁琐枯燥的工作开始:日报汇总。他需要汇总同事们昨天的工作内容,然后发给老板。

小朋友D要打开关闭20多个Excel文件,复制粘贴到一起,根据工作重要程度排序,统计工作地点等,进行一系列重复性操作,而且随着团队逐渐壮大,这项工作也变得越来越让人烦躁。

自己正好最近开始从零学Python,正好啃到数据存取与清洗,一激动就产生了帮别人偷懒的念头。能不能用Python写个小程序,把这种重复性的工作交给机器呢?

2

首先,我们来看一下输入和输出分别是什么。我拿到的是每位同事的工作日报Excel表,里面包含按照不同类别分类的工作内容和今、明两日工作地点记录,其中“类别”和“工作地点”都是有选项列表的,而最终老板要的是个汇总文档,而且要求重要的内容放前面,相同的内容要合并。

大体思路是,首先把各个表格的数据拿出来汇总成一份数据,然后根据工作重要程度先后筛选出不同类别的工作,再按照今日、明日分别筛选出相同工作地点的员工进行汇总,最后输出日报文档。

3

假设我现在有'小丸子.xlsx', '维尼.xlsx', '小猪.xlsx'3个同事的表格要汇总。先建立一个空的DataFrame变量RawData,逐一读取Excel文件添加到RawData里面,获取原始汇总数据就这么简单,只需要提供Excel的名称就好了,默认读取的是第一张Sheet,也可以指定读取任意的Sheet。

RawData = pd.DataFrame()

# 文件列表

filename = ['小丸子.xlsx', '维尼.xlsx', '小猪.xlsx']

# 从excel文件获取数据,并拼接

for i in range(len(filename)):

df = pd.read_excel(filename[i])

RawData = RawData.append(df)

4

然后我们打开一个叫”daily_report”的txt文件,准备编写汇总文档。假设工作内容的类别包括'需求设计', '需求提交后业务支持', '测试', '其他',注意这个列表数据一定要按照工作类别的重要性排序,这样才能保证数据写进汇总文档时也是按照工作重要性来编排的。

通过for循环从RawData里面筛选出只包含特定类别的表,并取‘工作内容’列的DataFram型数据转化成列表数据,写进汇总文档中。注意这里的write操作如果改用writelines的话,写入的数据之间是不会自动换行的,需要对列表进行处理,数据之间插入换行符。

with open('daily_report.txt', 'w') as f:

# 写入日期

f.write(str_yesterday+'')

f.write('工作内容')

#工作分类

job_list = [ '需求设计', '需求提交与提交后的业务支持', '测试', '其它']

# 读取每个工作分类的内容并按分类写进txt文档

for n in range(len(job_list)):

df_work = RawData.loc[RawData['类别'] == job_list[n]]

# 获取该分类下工作内容列表,把df数据转化成list数据

work_list = df_work['工作内容'].values.tolist()

# 当数组不为空时,进行写入操作

if work_list:

for m in range(len(work_list)):

f.write(work_list[m])

f.write('')

5

最后是统计工作地点,方法与工作内容汇总类似,以“今日工作地点”为例。假设工作地点选项包括'学校', '家', '出差', 通过for循环拿到每个工作地点的工作人员列表,写进汇总文档中。

# 写入工作地点

f.write('工作地点:')

# 工作地点分类

location = ['学校', '家', '出差']

# 截取表格中关于工作地点的内容

data = RawData.loc[RawData['类别'] == '今日工作地点']

for n in range(len(location)):

# 读取每个工作地点分类的内容

df_location = data.loc[data['工作内容'] == location[n]]

# 获取该分类下工作人员列表

worker_list = df_location['备注'].values.tolist()

# 当列表非空时操作

if worker_list:

f.write(location[n]+":")

for m in range(len(worker_list)):

f.write(worker_list[m]+" ")

f.write('。')

6

最后,因为同事的电脑并没有Python环境,为了方便他使用,我生成了exe文件。

PyInstaller是一个压缩python文件成为可执行程序的软件,它会扫描你所有的Python文档,并分析你代码运行所需的模块,最后把这些模块和你的代码打包一起,这样其它用户不用安装Python运行环境,直接运行exe文件就可以了。

针对Pycharm的操作步骤如下:

安装Pyinstaller库

通过File-Settings-Tools-Exteral Tools新增工具并配置参数,program栏位是填写Pyinstaller.exe文件的路径,Parameters栏位是写打包命令,我填写的是” -F dailyreport.py”,dailyreport是我要打包的py文件,F代表直接生成单独的exe文件。Working directory是要打包的py文件路径。

配置完后,点击tools-exteral tools,选择刚刚新增的pyinstaller工具即可。最后在当前的文件目录里会生成两个文件夹:build和dist。dist里面就是可执行文件。

7

细心的读者会发现,我并没有对工作内容进行合并同类项,这是因为每位同事对同个工作的表述是不一样的,通过机器很难判断,只能让汇总同事最后把把关了。总结一下这个项目用到的知识点:

上一篇下一篇

猜你喜欢

热点阅读