python合并word表格_Python实战009:读取Word文档中的表格数据及表格合并问题解决...

同事最近被安排整理资料,主要工作室将文档中的表格数据提取出来并整理层Excel表格供我们FII刀具商城进行资料维护。由于刀具的种类繁多且规格无数,所以要处理的数据量相当的庞大。人工核对整理既费时又费力还耗神显然不合适,作为程序员的我们整么能不出手支援呢?

一个Word文档中主要包含了有这么几种类型的内容:paragraph(段落)、table(表格)、character(字符)、image(图片)等。我现在要解析的word文档中主要是表格、字符串、图片等信息,我们主要是要拿到表格中的数据。

处理这类文档数据当然优先考虑Python啦,python解析word文件可以使用包docx。首先我们需要安装python-docx,直接执行命令:pip install python-docx即可安装。当前的python-docx的版本为0.8.10,当python-docx安装完毕后通过python命令启动Python并输入import docx命令,如果没有提示任何错误即表示python-docx安装成功了。

python-docx

Python-docx是一个用于创建和更新Microsoft Word(.docx)文件的python库,可以很好的处理Word文档中的数据,但是要注意的是该库

{!-- PGC_COLUMN --}

无法处理.doc后缀的Word文档(直接该文件后缀是不行的),所以如果要处理.doc文档请先另存为.docx后缀的Word文档。python-docx提供了丰富的API Documentation可以帮助用户快速实现对Word文档的Document objects(文档对象)、Document Settings objects(文档设置对象)、Style-related objects (风格相关的对象)、Text-related objects(文本相关的对象)、Table objects (表格对象)、Section objects (段落对象)、Shape-related objects (形状相关的对象)、DrawingML objects (绘图对象)、Shared classes (共享类)及Enumeration (枚举)等各种操作,可以实现包含段落、分页符、表格、图片、标题、样式等几乎所有的Word文档中能常用的功能。

获取Word中的表格数据

现在我们可以创建一个Python文件来开始读取Word文件了,这里我们先创建一个规则的表格数据的Word文档来测试。tables是Word文件中所有的table构成的list(当前测试文件中只有一个table),range()函数在 for 循环中创建一个整数列表(表格是从1开始的)。

表格合并问题处理

上面我们处理的是一个没有单元格合并的标准表格,获取数据还是想到的简单的。现在我们继续测试Word文件中包含合并的单元格表格,如果还是用上面的方法那么合并的单元格内容会重复显示。比如这里的物品购买明细会出现4次,合计会出现3次,143会出现2次。

单纯的数据去重

如果我们只是为了获取其中的数据,那么晚我们可以使用最简单的方法就是去重复。创建一个空的列表用来存储单元格中的数据,当单元格中的数据在列表中已经存在时跳过该值,如果不存在则将其加入到列表中,这样最后的列表数据就是我们得到的不重复的数据了。有人应该已经发现问题了,那就是不同单元格中如果存在相同的数据的话也会被去重了。

单元格合并特点

这里我们需要知道一个单元格合并的特点,每个单元格都有其对应的内存地址,及时两个单元格之间的数据相同但是其对应的内存地址是不同的。而单元格合并之后这几个合并的单元格所处的内存地址是相同的,所以我们只要找到地址重复的单元格就说明这几个地址所处的单元格是合并的单元格。

内存地址去重

所以这里我们就可以通过内存地址来去重,当获取到指定单元格时我们拿着该单元格地址去判断这个对应的上一行和上一列中是否存在相同的内存地址,如果存在说明数据已经提取到了此时可以跳过后面的处理,如果不存在则继续接下来的操作即可。

总结:

我看网上的Python处理word文档中表格合并问题的方案都比较繁琐,这里提供个简单易懂的方式希望能帮到大家。以上内容是小编给大家分享的【Python实战009:读取Word文档中的表格数据及表格合并问题解决】,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。

该方法只能去横向去重,纵向单元格合无效!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值