Python實(shí)現(xiàn)批量提取Word文檔表格數(shù)據(jù)
在大數(shù)據(jù)處理與信息抽取領(lǐng)域中,Word文檔是各類機(jī)構(gòu)和個(gè)人普遍采用的一種信息存儲格式,其中包含了大量的結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù),如各類報(bào)告、調(diào)查問卷結(jié)果、項(xiàng)目計(jì)劃等。這些文檔中的表格往往承載了關(guān)鍵的數(shù)據(jù)信息,如統(tǒng)計(jì)數(shù)據(jù)、項(xiàng)目進(jìn)度、研究成果等。然而,手動(dòng)從大量的Word文檔中逐一摘取并整理這些表格不僅耗時(shí)費(fèi)力,且易出錯(cuò),無法滿足高效、準(zhǔn)確的數(shù)據(jù)利用需求。因此,利用編程實(shí)現(xiàn)批量提取Word文檔中的表格成為了一種必要且高效的解決方案。Python作為一種功能強(qiáng)大、易學(xué)易用的編程語言,可以有效地實(shí)現(xiàn)這一目標(biāo),極大地提升數(shù)據(jù)采集和預(yù)處理的工作效率,同時(shí)也為后續(xù)的數(shù)據(jù)分析和應(yīng)用提供強(qiáng)有力的支持。本文將介紹如何使用Python實(shí)現(xiàn)對Word文檔中表格的提取。
本文所使用的方法需要用到Spire.Doc for Python,可從官網(wǎng)獲取。如果是將表格保存到Excel工作表,則還需要用到Spire.XLS for Python。
提取Word文檔表格并保存為Excel工作表
讀取Word文檔中的表格并寫入Excel工作簿需要同時(shí)用到這兩個(gè)庫。以下是操作步驟:
創(chuàng)建 Document 和 Workbook 對象。
使用 Document 類的 LoadFromFile() 方法載入指定路徑下的 Word 文檔。
清除 Workbook 中的所有工作表。
遍歷加載的 Word 文檔中的所有節(jié)(Sections)。
在每個(gè)節(jié)中,遍歷其包含的所有表格(Tables)。
對于每一個(gè)表格,創(chuàng)建一個(gè)新的 Excel 工作表,并根據(jù)表格索引為其命名。
遍歷表格中的每一行(Rows),并獲取當(dāng)前行對象。
再次遍歷該行中的所有單元格(Cells),獲取單元格對象。
對于每個(gè)單元格,將其包含的段落內(nèi)容合并為一個(gè)字符串(cellText)。
使用 Workbook 的工作表對象的 SetCellValue() 方法將合并后的單元格文本內(nèi)容寫入到對應(yīng)的工作表中。
完成所有表格數(shù)據(jù)的寫入后,使用 Workbook 的 SaveToFile() 方法將 Excel 數(shù)據(jù)保存到指定路徑。
代碼示例:
from spire.doc import * from spire.doc.common import * from spire.xls import * from spire.xls.common import * # 創(chuàng)建Document對象 doc = Document() # 載入Word文檔 doc.LoadFromFile("示例.docx") # 創(chuàng)建Workbook對象 wb = Workbook() wb.Worksheets.Clear() # 遍歷文檔中的節(jié) for i in range(doc.Sections.Count): # 獲取一個(gè)節(jié) section = doc.Sections.get_Item(i) # 遍歷節(jié)中的表格 for j in range(section.Tables.Count): # 獲取一個(gè)表格 table = section.Tables.get_Item(j) # 創(chuàng)建一個(gè)工作表 ws = wb.Worksheets.Add(f"表 {(j + 1)}") # 將表格數(shù)據(jù)寫入工作表 for row in range(table.Rows.Count): # 獲取一行 tableRow = table.Rows.get_Item(row) # 遍歷一行中的單元格 for cell in range(tableRow.Cells.Count): # 獲取一個(gè)單元格 tableCell = tableRow.Cells.get_Item(cell) # 獲取單元格的內(nèi)容 cellText = "" for paragraph in range(tableCell.Paragraphs.Count): paragraph = tableCell.Paragraphs.get_Item(paragraph) cellText = cellText + paragraph.Text # 將單元格的內(nèi)容寫入工作表 ws.SetCellValue(row + 1, cell + 1, cellText) wb.SaveToFile("output/Word表格寫入Excel.xlsx", FileFormat.Version2016) doc.Close() wb.Dispose()
提取結(jié)果
提取Word文檔表格并保存為CSV文件
CSV文件以文本的文件的形式儲存表格數(shù)據(jù),因此,我們可以直接使用Spire.Doc for Python提取Word文檔中的表格數(shù)據(jù)并寫入到CSV文件。以下是操作步驟:
創(chuàng)建 Document 對象。
使用 Document 類的 LoadFromFile() 方法載入指定路徑下的 Word 文檔。
遍歷載入的 Word 文檔中的所有節(jié)(Sections)。
在每個(gè)節(jié)內(nèi),進(jìn)一步遍歷其包含的所有表格(Tables)。
對于每個(gè)表格,生成對應(yīng)的 CSV 文件名,并以寫模式打開這個(gè)文件,設(shè)置編碼為 UTF-8 并開啟新行模式。
創(chuàng)建 csv.writer 對象用于寫入 CSV 文件內(nèi)容。
根據(jù)表格的列數(shù)動(dòng)態(tài)生成 CSV 文件的標(biāo)題行(列名),并用 writerow() 方法寫入到CSV文件中。
遍歷當(dāng)前表格的每一行(Rows),獲取當(dāng)前行對象。
對于每一行中的每個(gè)單元格,只提取第一個(gè)段落的文本內(nèi)容,形成一行的數(shù)據(jù)列表。
使用 csv.writer 對象的 writerow() 方法將這一行的數(shù)據(jù)列表寫入到對應(yīng)的 CSV 文件中。
在完成一個(gè)表格的所有數(shù)據(jù)寫入后,關(guān)閉已打開的 CSV 文件。
繼續(xù)處理下一個(gè)表格,直至遍歷完所有表格。
import csv from spire.doc import * # 創(chuàng)建Document對象 doc = Document() # 載入Word文檔 doc.LoadFromFile("示例.docx") # 遍歷文檔中的節(jié) for i in range(doc.Sections.Count): # 獲取一個(gè)節(jié) section = doc.Sections.get_Item(i) # 遍歷節(jié)中的表格 for j in range(section.Tables.Count): # 獲取一個(gè)表格 table = section.Tables.get_Item(j) # 創(chuàng)建CSV文件名并打開文件 csv_file_name = f"output/CSV/表_{(j + 1)}.csv" with open(csv_file_name, 'w', newline='', encoding='utf-8') as csvfile: writer = csv.writer(csvfile) # 遍歷表格中的每一行 for row in range(table.Rows.Count): # 獲取一行 tableRow = table.Rows.get_Item(row) # 讀取一行中的單元格內(nèi)容,只取每個(gè)單元格的第一個(gè)段落 row_data = [tableRow.Cells.get_Item(cell).Paragraphs[0].Text for cell in range(tableRow.Cells.Count)] # 將單元格內(nèi)容寫入CSV文件 writer.writerow(row_data) doc.Close()
提取結(jié)果:
到此這篇關(guān)于Python實(shí)現(xiàn)批量提取Word文檔表格數(shù)據(jù)的文章就介紹到這了,更多相關(guān)Python提取Word表格數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于python實(shí)現(xiàn)生成指定大小txt文檔
這篇文章主要介紹了基于python實(shí)現(xiàn)生成指定大小txt文檔,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07python編程PyQt5創(chuàng)建按鈕及觸發(fā)點(diǎn)擊事件示例解析
這篇文章主要為大家介紹了python編程使用PyQt5如何創(chuàng)建按鈕及觸發(fā)點(diǎn)擊事件的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10Python創(chuàng)建一個(gè)空的dataframe,并循環(huán)賦值的方法
今天小編就為大家分享一篇Python創(chuàng)建一個(gè)空的dataframe,并循環(huán)賦值的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11python連接mongodb數(shù)據(jù)庫操作數(shù)據(jù)示例
這篇文章主要介紹了python連接mongodb操作數(shù)據(jù)示例,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-11-11Tensorflow卷積實(shí)現(xiàn)原理+手寫python代碼實(shí)現(xiàn)卷積教程
這篇文章主要介紹了Tensorflow卷積實(shí)現(xiàn)原理+手寫python代碼實(shí)現(xiàn)卷積教程,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05