如何在Python中自动化处理word表格?
原创
©著作权归作者所有:来自51CTO博客作者华科云商小徐的原创作品,请联系作者获取转载授权,否则将追究法律责任
最近遇到一个问题,就是一个文档里面有很多重复操作的一些数字需要整理为excel表格,主要是方便我们后期操作使用。首先是我对这些数据做了脱敏处理,但这些坐标也都是真是存在的。再次就是其中的真实数据很多,如果想要人工拷贝出来想必麻烦的很,所以得利用我们所学的知识来快速完成这项工作。
解题思路
这里的关键点是提取经纬度(X和Y),X是8位的数字,Y是7位数字,我们这时候很容易想到用正则表达式。正则表达式我之前就有讲解过,不愧是YYDS。
X是8位,很好提取,直接用\d{8}就行;但是7位的Y就不能直接这样写,因为这样也会匹配到X中的数字(因为X有8位,7位小于8位,会匹配到),所以我们需要在前面和后面加上英文逗号,加以限制。
最后,要解决的就是如何读取word中的表格,和读取后怎么写入excel表中。这两个问题使用docx和xlwt库即可,别忘记安装这两个库。
pip install python-docx
pip install xlwt
实现代码
下面就是我写的代码,都加了注释,希望大家自己也尝试写一下。
from docx import Document #用于读取word
import re #正则表达式库
import xlwt #写入excel的库
# 创建excel工作簿和sheet,在第一行写入表头。
workbook = xlwt.Workbook(encoding='utf-8')
sheet = workbook.add_sheet('点位')
sheet.write(0, 0, "点位")
sheet.write(0, 1, "X")
sheet.write(0, 2, "Y")
# 读取word,并获取word中的第一个表
doc = Document('坐标.docx')
tb1 = doc.tables[0]
# 定义临时变量,用于一行行写入数据到excel。
j = 1
# 读取word表中的数据,正则表达式提取后写入excel中。
for i in range(len(tb1.rows)):
if i == 0:
continue
title = tb1.cell(i, 0).text
coordinate = tb1.cell(i, 3).text
lons = re.findall('(\d{8})', coordinate)
lats = re.findall(',(\d{7}),', coordinate)
for lon, lat in zip(lons, lats):
sheet.write(j, 0, title)
sheet.write(j, 1, lon)
sheet.write(j, 2, lat)
j += 1
print(title, lons, lats)
# 保存文件
workbook.save('test.xls')
最后,大家有没有碰到过类似重复操作的任务,大家平时是怎么做的,留言和我讨论吧~