Word和Excel大概是咱们最常碰到的两种文件了,我前面写过pandas的基本操做,利用它能够轻松完成Excel文件的批量处理,那么对于word文件的处理是否也有一样简单的方式,答案是确定的,这涉及到python的另外一个库docx,这篇文章的主要内容是:
如何批量处理word中的表格
我随便找了一个Word文件,它的部份内容以下:
这个文件中有多个这样表格,咱们要将它们处理成一个简单表——属性一行,值 一行
下面正式开始,docx以外的内容我将不作详细说明,有问题请留言。html
1.安装docx:
pip install python-docx
python
2.导入docx库
from docx import Document import pandas as pd
3.读Word文件
doc=Document('2007年三江源生态监测森林数据集.docx')
ps:docx不支持dox格式的word文件。app
4.读表格
tb=doc.tables
5.读行
rows=tb[0].rows
6.读列
cols=rows[0].cells
7.单元格
cell=cols[0] text=cell.text
有了上面的基础知识,读取word中的表格应该没什么问题了,下面是是完整代码:post
doc=Document('2007年三江源生态监测森林数据集.docx') index,key,value=[],[],[] table_index=0 for tb in doc.tables: table_index+=1 row_index=0 for row in tb.rows: row_index+=1 for cell in row.cells: text="" for p in cell.paragraphs:##若是cell中有多段,即有回车符 text+=p.text if row_index%2==0: value.append(text)#偶数行为值 index.append(table_index)#这行也能够放在else中 else: key.append(text)#奇数行为属性
如今word中全部表格的内容已经读出来了,不过是在两个列表中,将它们从新构形成一个表格。ui
8.重建表格
df=pd.DataFrame({'table_index':index,'key':key,'value':value})
可是这个表格并非咱们想要的结果,咱们想要的是key为表头,value为值,table_index为索引,因此咱们还须要进一步的操做。spa
8.pviot
#删除重复行,不然会报错:Index contains duplicate entries, cannot reshape df=df.drop_duplicates(['table_index','key']) df1=df.pivot(index='table_index',columns='key',values='value') #下面两行用于去除列名和索引名,无关紧要,加上只由于我有强迫症,为了美观,感兴趣的朋友能够对比加上这现行先后的差别 df1.columns=list(df1.columns) df1.index=list(df1.index)
最终获得的表格是这样的:
.net
9.如何把表格写入word文件
上面的表格内容太多,咱们取一部分写入word中3d
from docx.enum.table import WD_TABLE_ALIGNMENT from docx.shared import Cm df2=df1.iloc[:10,:6] d=Document() tb=d.add_table(rows=len(df2.index),cols=len(df2.columns)) tb.add_row() for i in range(len(df2.columns)): tb.cell(0,i).text=df2.columns[i]#添加表头 for row in range(1,len(df2.index)+1): for col in range(len(df2.columns)): tb.cell(row,col).width=1 tb.cell(row,col).text=df2.iloc[row,col] tb.cell(row,col).width=Cm(6) tb.cell(row,col).ipynb tb.style='Medium Grid 1 Accent 1' tb.autofit=True d.save('tb.docx')
最后生成的word表格是这样的:
关于表格的样式控制将在另外一篇博客中展开讨论:利用python批量处理Word文件——表格(二)样式控制
关于word表格的处理就到这里了,现实中咱们要处理的文件内容变幻无穷,不过只要熟练这些基础操做,就能够以不变应万变,后面我会继续写word中其它内容的处理,感兴趣的朋友能够多多关注。code