问题说明
用 python-docx
模块读取 docx
表格,导致提取出来的内容重复,按列合并或按行合并都会导致重复。
例如读取下面表格第 3 列的数据。
1
2
3
4
5
|
from docx import Document
doc = Document('test.docx')
table0 = doc.tables[0]
for cell in table0.columns[len(table0.columns) - 1].cells:
print(cell.text)
|
输出结果:
解决思路
利用合并的每个单元内存地址是一样的原理,排除掉内存地址一样的单元格里的数据,剩下的就是要获取的数据。
1
2
3
4
5
6
|
from docx import Document
doc = Document('test.docx')
table0 = doc.tables[0]
for cell in table0.columns[len(table0.columns) - 1].cells:
print('单元格内容:', cell.text, '内存地址:', cell._tc)
|
输出结果:
从输出结果中可以看到,合并后的单元格地址是一样的。
解决办法
1
2
3
4
5
6
7
8
9
10
|
from docx import Document
doc = Document('test.docx')
table0 = doc.tables[0]
cell_set = set()
for cell in table0.columns[len(table0.columns) - 1].cells:
if cell._tc not in cell_set:
cell_set.add(cell._tc)
print(cell.text)
|
输出结果:
新建一个集合,排除掉内存地址一样的数据,剩下就是合并后的数据。