2017-10-07 165 views
0

我知道这是一个重复的问题,但这些答案不适用于我。我有一个word文件,其中包含一张表,现在我希望该表格作为我的python程序的输出。我使用Python 3.6,我也安装了python -docx。这里是我的数据提取代码python -docx从word 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文件。在此先感谢

+0

问题是?错误? –

+0

我试过你的代码,它适用于我。 –

回答

3

您的代码适合我。将它插入数据框怎么样?

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 
+0

谢谢你。很好的工作,我有另一个问题,我如何显示该表中的特定行和列? –

+0

@ArunBaskar我会更新 –

+0

你能否像以前发送的那样粘贴完整的代码。我对这段代码感到困惑。例如如何从docx.api进口文献编辑该代码进口熊猫作为PD 文档=文档( 'test_word.docx') 表= document.tables [0] 数据= [] 键=无 对于i,行中的枚举(table.rows): 文本=(cell.text用于row.cells小区) 如果我== 0: 键=元组(文本) 继续 ROW_DATA =字典( zip(keys,text)) data.append(row_data) print(data) df = pd.DataFra我(数据) 打印(df) –