python邮件合并的基本操作步骤_Python如何实现反向邮件合并功能

摘要:邮件合并是Office的一项功能,可便捷地批量生成文档,却无法从大量Word文档中汇总信息。结合实际应用,阐述基于Python语言对Word文档进行批量导入、读取其中的表格与段落、汇总信息至Excel工作簿的实现过程。实现反向邮件合并功能,解决Word文档批量汇总中的多个难点,实现Word文档批量汇总的自动化,有效提高了用户的工作效率,适用于人事数据、财务数据、员工信息的汇总,具有良好的实用性与推广价值。

关键词:Python;邮件合并;批量汇总

邮件合并是Office提供的一项既强大又实用的功能,其作用是将存放在Excel中的数据源按照一个记录一页的方式生成Word文档,常用于批量制作邮件、请柬、简历、成绩单、证书、工作档案等。邮件合并的使用步骤如下:首先准备标准的Excel数据源和Word模板,接着在Word模板中启动邮件合并、选择收件人、插入数据域、查看合并数据、完成合并。其主要工作在于Excel数据源和Word模板的制作,其余步骤通过在Word模板中选择相应功能即可完成,极大地提高了批量制作文档的效率。在实际工作中不但需要邮件合并功能,还需要反向邮件合并功能,即从同一模板下的Word文档中提取信息并汇总为Excel表,比如汇总所有员工的工作档案、汇总所有党员的基本信息文档、汇总所有员工的职业资格文档等。但是Office并未提供反向邮件合并功能,无法便捷地从大量Word文档中提取信息。Python语言提供了操作Office的库,基于Python编程实现反向邮件合并,可快速从Word文档的表格、段落中提取信息,汇总并输出为Excel工作簿。

1需求分析

反向邮件合并即批量读取Word文档,将文档中的信息汇总为Excel工作簿。其功能还包括在计算机桌面检查并生成“反向邮件合并”文件夹,由用户将待合并的文档存放到此文件夹内。Word文档中待合并的信息分别在表格和段落中。对于表格,需要将所有文档相同位置的单元格内容汇总为Excel表的一列;对于段落,需要将全部文档相同位置的段落文本汇总为Excel表的一列,便于下一步根据需要保留、删除信息。以汇总员工工作档案为例,在单个Word文档中记录了员工个人信息、学历与培训、职业资格、获奖证书、荣誉称号、联系方式等信息,为便于统计,将全体员工的工作档案汇总为Excel表,则Excel表的一列对应着全部Word文档相同位置的信息。比如Excel表的“姓名”列存放全部Word文档中的姓名信息,“培训”列存放所有Word文档中的培训信息等。之后通过保留Excel表部分列的方法即可选取所需的信息。实现反向邮件合并的步骤包括:路径生成、Word文件识别、读取文档、遍历表格与段落、信息汇总至数据帧、合并数据帧、结果输出至Excel工作簿等。

2编程实现

2.1编程环境编程环境采用Windows下的Anaconda软件,Anaconda包含了Conda、Python在内的大量科学包及其依赖项,以及高效的Python开发环境Spyder。具体开发环境为:Windows7/10操作系统、Anaconda3-5.3.0(64-bit)、Python-docx库,Pandas库。2.2导入代码所需的库实现反向邮件合并功能依赖于Python下的os、Python-docx、Pandas三个库,其中os是Python自带的标准库,Python-docx与Pandas是第三方库,需事先安装。importos#用于路径生成与识别importdocx#用于操作Wordimportpandasaspd#用于操作Excel2.3获取Word文档中的表格与段落首先获取计算机桌面的路径,在计算机桌面检查并创建“反向邮件合并”文件夹。遍历该文件夹内所有文件,通过f.endswith('.docx')方法选取路径名以“docx”结尾的文档,通过docx.Document.tables、docx.Document.paragraphs读取文档中的表格集与段落集。关键代码如下:path_desktop=os.path.join(os.path.expanduser("~"),'Desktop').replace('\\','/')path_反向邮件合并=path_desktop+'/反向邮件合并/'#设置反向邮件合并文件夹的路径ifos.path.exists(path_反向邮件合并):#检查并生成反向邮件合并文件夹passelse:os.makedirs(path_反向邮件合并)files=os.listdir(path_反向邮件合并)#获取该文件夹下所有文件路径data1=pd.DataFrame()#创建空的总表data2=pd.DataFrame()forfinfiles:#对于该文件夹下所有文件iff.endswith('.docx'):#如果文档的后缀名是docxdocument=docx.Document(path_反向邮件合并+f)#读取文档tables=document.tables#获取文档中的表格集paragraphs=document.paragraphs#获取文档中的段落集else:pass#忽略目录下的非docx文件2.4表格信息合并表格中的信息存放在每个单元格中,通过table.cell.text方法可按位置获取单元格内的文本。首先创建与Word表格同样尺寸的数据帧,遍历表格中的所有单元格,将每个单元格内的信息连接为一个文本后存放到数据帧的相同位置,便生成了与当前Word文档表格内容一致的数据帧。但多个表格内容不可直接纵向合并,否则会导致多种属性的数据被存放到一列中,影响下一步的信息提取。因此将每个数据帧重塑为一行,再将所有行的数据帧合并。关键代码如下:fortableintables:#对于每一个表格row_num=len(table.rows)#获取表格的行数col_num=len(table.columns)#获取表格的列数total_num=row_num*col_num#获取表格的单元格数#创建与文档中的每个表格同样大小的数据帧data1_small=pd.DataFrame(columns=range(col_num),index=range(row_num))forrowinrange(row_num):forcolinrange(col_num):message=''.join(table.cell(row,col).text.split())#获取当前单元格的信息data1_small.iloc[row,col]=message#存放到数据帧的对应位置data1_small=pd.DataFrame(data1_small.values.reshape(1,total_num))#将数据帧重塑为一行data1=pd.concat([data1,data1_small],ignore_index=True)#将该单行数据帧合并到总表1中2.5段落信息合并段落中的信息即该段落的全部文本,通过paragraph.text方法可按顺序获取段落文本。首先创建列数等于段落数的单行数据帧,遍历所有段落,将每个段落的文本存放到数据帧的对应列,便生成了包含当前Word文档所有段落文本的单行数据帧,再将所有行数据帧合并。关键代码如下:p_num=len(paragraphs)data2_small=pd.DataFrame(columns=range(p_num),index=range(1))fori,tinenumerate(paragraphs):#枚举段落集中的段落与下标message=t.text#获取当前段落文本data2_small.iloc[0,i]=message#存放到数据帧的对应位置data2_small=pd.DataFrame(data2_small.values.reshape(1,p_num))#重塑数据帧data2=pd.concat([data2,data2_small],ignore_index=True)#将该单行数据帧合并到总表2中2.6信息输出将信息提取结果输出为“反向邮件合并结果.xlsx”工作簿,其中包含“表格合并结果”与“段落合并结果”两个工作表,关键代码如下:writer=pd.ExcelWriter(path_反向邮件合并+'反向邮件合并结果.xlsx')data1.to_excel(writer,'表格合并结果')data2.to_excel(writer,'段落合并结果')writer.save()

3结论

Office的邮件合并功能可便捷地批量生成文档,却无法从大量Word文档中汇总信息,如果缺乏自动化、批量化的汇总方法,信息汇总的过程将成为耗时多、易出错、效率低的瓶颈环节。借助Python下的Python-docx库与Pandas库,管理人员可以快速、准确地从结构一致的Word文档中读取数据并汇总至Excel工作簿,从而实现反向邮件合并功能。除了汇总Word文档中的信息,Python的Pandas库自带功能齐全的统计分析函数,用户也可以方便地自定义函数,对汇总后的信息进行个性化的分析,极大地拓展了Python的分析能力,有效地提高了用户的工作效率,具有良好的实用性与推广价值。

参考文献:

[1]张良均,王路,谭立云,等.Python数据分析与挖掘实战[M].北京:机械工业出版社,2015:60-64.

[2]Kyxdpzy.从Excel到Python:数据分析进阶指南[M/OL].(2019-04-27)

[3]MCKINNEYW.利用Python进行数据分析:第2版[M].徐敬一,译.北京:机械工业出版社,2018:10-11.

[4]恒盛杰资讯.Word/Excel/PPT2016高效办公实战从入门到精通[M].北京:机械工业出版社,2017:366-373.

[5]杨阳.Word/Excel/PPT2016办公应用从入门到精通[M].天津:天津科学技术出版社,2017:570-574.

[6]张志强,赵越.零基础学Python[M].北京:机械工业出版社,2015:85-86.

作者:马孝宗 戚亚东 徐燕 单位:河南中烟工业有限责任公司驻马店卷烟厂

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值