使用Python-docx从Word文档中提取表格

15

我知道这是一个重复的问题,但其他答案对我没有用。 我有一个包含一个表格的Word文件。我希望将该表作为我的Python程序输出。我正在使用Python 3.6,并已安装python-docx。以下是我的数据提取代码:

from docx.api import Document

document = Document('test_word.docx')
table = document.tables[0]

data = []

keys = None
for i, row in enumerate(table.rows):
    text = (cell.text for cell in row.cells)

    if i == 0:
        keys = tuple(text)
        continue
    row_data = dict(zip(keys, text))
    data.append(row_data)
    print (data)

我希望得到与Word Docx文件完全相同的结果。提前感谢。


问题出在哪里?错误在哪里? - Anton vBR
我尝试了你的代码,它在我的电脑上运行正常。 - Anton vBR
这个问题对于将搜索引擎查询[从docx中提取表格]与伟大的python-docx包的存在联系起来非常有用。 - temoto
1个回答

19

你的代码对我来说很好用。将它插入到数据框里,怎么样?

import pandas as pd
from docx.api import Document

document = Document('test_word.docx')
table = document.tables[0]

data = []

keys = None
for i, row in enumerate(table.rows):
    text = (cell.text for cell in row.cells)

    if i == 0:
        keys = tuple(text)
        continue
    row_data = dict(zip(keys, text))
    data.append(row_data)
    print (data)

df = pd.DataFrame(data)

如何在表格中显示特定的行和列? 我们可以使用 iloc 根据索引提取行和列。

# iloc[row,columns] 
df.iloc[0,:].tolist() # [5,6,7,8]  - row index 0
df.iloc[:,0].tolist() # [5,9,13,17]  - column index 0
df.iloc[0,0] # 5  - cell(0,0)
df.iloc[1:,2].tolist() # [11,15,19]  - column index 2, but skip first row

等等...

然而,如果你的列有名称(在本例中为数字),你可以这样做:

#df["name"].tolist() 
df[1].tolist() # [5,6,7,8] - column with name 1 

print(df)

打印结果就是我的示例文档中表格的样子。

    1   2   3   4
0   5   6   7   8
1   9   10  11  12
2   13  14  15  16
3   17  18  19  20

谢谢,太棒了。我还有一个问题,如何在表格中显示特定的行和列? - Aroon
1
@ArunBaskar 我稍微调整了一下,希望这是你想要的 :) - Anton vBR
谢谢,Anton,这个怎么样?https://stackoverflow.com/questions/46659311/how-to-count-specific-column-name-among-different-tables-in-word-using-python - Aroon
@ArunBaskar,你可以尝试使用类似于这个的东西来回复你已删除的问题。顺便说一句,如果你决定恢复你的问题,请@我... - MaxU - stand with Ukraine
@MaxU 很好。这个答案实际上只是对问题的修改,我调整了代码。我喜欢你的方法。 - Anton vBR
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接