我面临着试图以表的形式从word文件中提取数据的问题。我必须遍历500个单词的文件,并在每个文件中提取一个特定的表,但该表在每个单词文件中的不同位置出现。这是我的代码:
import pandas as pd
from docx.api import Document
import os
os.chdir('C:\Users\user1\test')
path = 'C:\Users\user1\test'
worddocs_list = []
for filename in list(os.listdir(path)):
wordDoc = Document(path+"\"+filename)
worddocs_list.append(wordDoc)
data = []
for wordDoc in worddocs_list:
table = wordDoc.tables[8]
for i, row in enumerate(table.rows):
text = (cell.text for cell in row.cells)
row_data = (text)
data.append(row_data)
df = pd.DataFrame(data)
print(df)
它可以很好地遍历所有文件,但会出现错误,因为某些word文档没有它要查找的表,因为它只查找一个元素:wordDoc.tables[8],因此会出现IndexError。我希望能够将其更改为具有某些列标题的表:联系人姓名职位位置电子邮件电话资产类别
有没有一种方法可以修改显示的代码,以便能够找到我要查找的表?
非常感谢。
您可以捕获索引错误并忽略它,而不是更改逻辑以查找具有特定列名的表。这将使您能够在文档中不存在该表时无错误地继续操作。这是使用try
和except
来完成的。
import pandas as pd
from docx.api import Document
import os
os.chdir('C:\Users\user1\test')
path = 'C:\Users\user1\test'
worddocs_list = []
for filename in list(os.listdir(path)):
wordDoc = Document(os.path.join(path, filename))
worddocs_list.append(wordDoc)
data = []
for wordDoc in worddocs_list:
try:
table = wordDoc.tables[8]
for i, row in enumerate(table.rows):
text = (cell.text for cell in row.cells)
row_data = (text)
data.append(row_data)
except IndexError:
continue
df = pd.DataFrame(data)
print(df)
此外,请注意,组合路径时最好使用os.path.join()
,而不是连接路径字符串。