如何使用 python docx 从多个文件中提取 Word table
How to extract a Word table from multiple files using python docx
我正在做一个项目,我需要分析一千多个 MS-Word 文件,每个文件都包含相同的 table。从每个 table 我只需要提取几个单元格并将它们变成一行,稍后将连接起来创建一个日期框以供进一步分析。
我在一个文件上测试了 Python 的库 docx,它成功地读取了 table。然而,在将相同的函数插入到一个 for 循环中之后,该循环首先创建一个由所有文件名组成的变量,然后将其传递给 Document 函数,输出只是一个 table,这是第一个 [=24] =] 在文件列表中。
我觉得我没有以正确的方式看待这个问题,我将不胜感激,因为我现在完全无助了。
以下是我使用的代码,它主要由我在Whosebug中偶然发现的代码组成:
import os
import pandas as pd
file = [f for f in os.listdir() if f.endswith(".docx") ]
for name in file:
document = Document(name)
table = document.tables[0]
data = []
keys = None
for i, row in enumerate(table.rows):
text = (cell.text for cell in row.cells)
# Establish the mapping based on the first row
# headers; these will become the keys of our dictionary
if i == 0:
keys = tuple(text)
continue
# Construct a dictionary for this row, mapping
# keys to values for this row
row_data = dict(zip(keys, text))
data.append(row_data)
谢谢
您正在将每个文档的 data
列表重新初始化为 []
(空)。因此,您仔细地从文档中收集行数据,然后在下一步中将其丢弃。
如果您将 data = []
移动到循环之外,那么在遍历文档后它将包含所有提取的行。
data = []
for name in filenames:
...
data.append(row_data)
print(data)
我正在做一个项目,我需要分析一千多个 MS-Word 文件,每个文件都包含相同的 table。从每个 table 我只需要提取几个单元格并将它们变成一行,稍后将连接起来创建一个日期框以供进一步分析。
我在一个文件上测试了 Python 的库 docx,它成功地读取了 table。然而,在将相同的函数插入到一个 for 循环中之后,该循环首先创建一个由所有文件名组成的变量,然后将其传递给 Document 函数,输出只是一个 table,这是第一个 [=24] =] 在文件列表中。
我觉得我没有以正确的方式看待这个问题,我将不胜感激,因为我现在完全无助了。
以下是我使用的代码,它主要由我在Whosebug中偶然发现的代码组成:
import os
import pandas as pd
file = [f for f in os.listdir() if f.endswith(".docx") ]
for name in file:
document = Document(name)
table = document.tables[0]
data = []
keys = None
for i, row in enumerate(table.rows):
text = (cell.text for cell in row.cells)
# Establish the mapping based on the first row
# headers; these will become the keys of our dictionary
if i == 0:
keys = tuple(text)
continue
# Construct a dictionary for this row, mapping
# keys to values for this row
row_data = dict(zip(keys, text))
data.append(row_data)
谢谢
您正在将每个文档的 data
列表重新初始化为 []
(空)。因此,您仔细地从文档中收集行数据,然后在下一步中将其丢弃。
如果您将 data = []
移动到循环之外,那么在遍历文档后它将包含所有提取的行。
data = []
for name in filenames:
...
data.append(row_data)
print(data)