Python用docx處理Word中表格時出現的文本重複問題

這兩天用docx提取Word中表格時, 發現對於稍稍複雜一點的表格就會出現很多重複項, 比如

一張很常見的Word中的表格

使用代碼

table_temp = []
path = r"./demo.docx"

document = Document(path)
tables = document.tables

for row in tables[0].rows:
row_temp = []
for cell in row.cells:
row_temp.append(cell.text)
table_temp.append(row_temp)
table_temp

其得到結果部分為

[從何時開始
運行,

2017.10,
每年運行費用(萬元),
每年運行費用(萬元),
每年運行費用(萬元),

2,
場地
面積,
600㎡,
600㎡,
600㎡,
600㎡,
場地產權是否歸團組織(如否,請註明使用年限),
場地產權是否歸團組織(如否,請註明使用年限),
場地產權是否歸團組織(如否,請註明使用年限),
是,
是],
[上級團組織或同級財政是否有配套經費,
無,
配套經費
(萬元),
配套經費
(萬元),
配套經費
(萬元),
,
專職工作人員數,
現有,
現有,
擬安排,
擬安排,
兼職工作人員數,
兼職工作人員數,
兼職工作人員數,
現有,
擬安排],
[上級團組織或同級財政是否有配套經費,
無,
配套經費
(萬元),
配套經費
(萬元),
配套經費
(萬元),
,
專職工作人員數,

最初我試圖跳過已出現的文本, 但是有不少文本本來就是多次出現的, 遂作罷.

之後閱讀了部分源代碼發現, 那些程序性重複文本是對同一個對象的引用, 所以只要在讀取一個值後對其text置空或者任意自定義的其他, 就可以把後面將要出現的程序性重複項也設置為自定義項.

table_temp = []
path = r"demo.docx"
null_text = str(time.time())

document = Document(path)
tables = document.tables

for row in tables[0].rows:
row_temp = []
for cell in row.cells:
if cell.text != null_text:
row_temp.append(cell.text)
cell.text = null_text
table_temp.append(row_temp)
table_temp

可得到

[[申報平台
名稱],
[負責人
是否專職, 負責人
姓 名, 手機],
[平台所在地址及郵編, 聯繫電話 ],
[從何時開始
運行, 每年運行費用(萬元), 場地
面積, 場地產權是否歸團組織(如否,請註明使用年限)],
[上級團組織或同級財政是否有配套經費,
配套經費
(萬元),
專職工作人員數,
現有,
擬安排,
兼職工作人員數,
現有,
擬安排],
[],
[是否與系統團組織共建, 共建單位名稱],
[申請
經費用途],
[綜合服務平台或建設團組織近三年獲得的榮譽],
[已






目, 項目名稱, 項目內容, 服務群體, 服務人數]]

至此, 只要稍稍處理下規則就能愉快地格式化數據了


吐槽:

docx對於表格的處理真的太麻纏了, 幾乎要被逼換vba, QWQ

推薦閱讀:

TAG:Python | MicrosoftWord |