利用python-docx批量處理Word文件——表格


Word和Excel大概是我們最常碰到的兩種文件了,我前面寫過pandas的基本操作,利用它可以輕松完成Excel文件的批量處理,那么對於word文件的處理是否也有同樣簡單的方式,答案是肯定的,這涉及到python的另一個庫docx,這篇文章的主要內容是:
如何批量處理word中的表格
我隨便找了一個Word文件,它的部分內容如下:
在這里插入圖片描述
這個文件中有多個這樣表格,我們要將它們處理成一個簡單表——屬性一行,值 一行
下面正式開始,docx之外的內容我將不做詳細說明,有問題請留言。


1.安裝docx:

pip install python-docx

2.導入docx庫

from docx import Document
import pandas as pd

3.讀Word文件

doc=Document('2007年三江源生態監測森林數據集.docx')

ps:docx不支持dox格式的word文件。

4.讀表格

tb=doc.tables

5.讀行

rows=tb[0].rows

6.讀列

cols=rows[0].cells

7.單元格

cell=cols[0]
text=cell.text

有了上面的基礎知識,讀取word中的表格應該沒什么問題了,下面是是完整代碼:

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中所有表格的內容已經讀出來了,不過是在兩個列表中,將它們重新構造成一個表格。

8.重建表格

df=pd.DataFrame({'table_index':index,'key':key,'value':value})

在這里插入圖片描述
但是這個表格並不是我們想要的結果,我們想要的是key為表頭,value為值,table_index為索引,所以我們還需要進一步的操作。

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)

最終得到的表格是這樣的:
在這里插入圖片描述

9.如何把表格寫入word文件

上面的表格內容太多,我們取一部分寫入word中

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中其它內容的處理,感興趣的朋友可以多多關注。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM