用python提取word到excel(excel可更新)
用python提取word到excel(excel可更新)
·
接了一个小单,需求是:
- 用Python实现自动生成并更新Tracker表格。
- Tracker表格中有两个sheet,分别对应相同名字的文件夹,SAV是doc文件合集,每个文件夹将会有上百个文件(目前只放了几个用于测试,实际上需要录入七八百个文件),需要实现自动按照ID的顺序将信息自动录入Tracker这个excel中。
- 待提取内容部分来自表格,部分来自文本。
- 当文件夹中加入新文件时,再次运行代码可以更新excel。
字段对应关系非常简单,同名即对应。
背景如上,开始设计程序。基本思路是:首先针对单个word文档进行提取,然后加入遍历文件夹操作。
这个word涉及表格和文字,所以分别提取内容存至列表col_values。
file=Document(doc_path)
col_keys = [] # 获取列名
col_values = [] # 获取全部列值
# 添加一个去重机制
index_num = 0
fore_str = ''
for table in file.tables:
for row_index,row in enumerate(table.rows):
for col_index,cell in enumerate(row.cells):
if fore_str != cell.text:
if index_num % 2==0:
col_keys.append(cell.text)
else:
col_values.append(cell.text)
fore_str = cell.text
index_num +=1
for para in file.paragraphs:
col_values.append(para.text)
然后输出col_values的值,使用自己需要的内容在列表中的位置(索引)将需要的col_values按顺序存放至列表doc_values。
date = col_values[1].split('\n')
doc_values = [] # 获取需要的列值
doc_values.append(col_values[0])
doc_values.append(date[1])
doc_values.append(col_values[7])
doc_values.append(col_values[9])
doc_values.append(' ')
doc_values.append(col_values[4])
doc_values.append(col_values[3])
doc_values.append(col_values[23])
至此完成对单个word文档的内容提取。
开始设计遍历文件夹部分。
if __name__ == '__main__':
for filepath,dirnames,filenames in os.walk(r"D:\install\desktop\AM\SAV"):
for filename in filenames:
doc_path = os.path.join(filepath,filename)
doc_values = write_word(doc_path)
wb = load_workbook('D:/install/desktop/Tracker.xlsx')
ws2 = wb['SAV']
rows = ws2.max_row
因为我使用os.walk每次都会遍历文件夹里的所有文件,所以需要加入一个判断结构:判断当前文件是否已经被写入excel,同时注意写入excel时使用的是追加操作。
columnA_data = []#存放当前excel里的所有ID
for i in range(1, rows):
cell_value = ws2.cell(row=i+1, column=1).value
columnA_data.append(cell_value)
if doc_values[0] in columnA_data:
print("文件{}已被写入excel".format(doc_values[0]))
else:
ws2.append(doc_values)
wb.save('D:/install/desktop/Tracker.xlsx')
print('保存成功')
至此全部完成。
完整代码如下:
from docx import Document
from openpyxl import load_workbook
import os
def write_word(doc_path):
file=Document(doc_path)
col_keys = [] # 获取列名
col_values = [] # 获取全部列值
# 添加一个去重机制
index_num = 0
fore_str = ''
for table in file.tables:
for row_index,row in enumerate(table.rows):
for col_index,cell in enumerate(row.cells):
if fore_str != cell.text:
if index_num % 2==0:
col_keys.append(cell.text)
else:
col_values.append(cell.text)
fore_str = cell.text
index_num +=1
for para in file.paragraphs:
col_values.append(para.text)
print(col_values)
date = col_values[1].split('\n')
doc_values = [] # 获取需要的列值
doc_values.append(col_values[0])
doc_values.append(date[1])
doc_values.append(col_values[7])
doc_values.append(col_values[9])
doc_values.append(' ')
doc_values.append(col_values[4])
doc_values.append(col_values[3])
doc_values.append(col_values[23])
return doc_values
if __name__ == '__main__':
for filepath,dirnames,filenames in os.walk(r"D:\install\desktop\AM\SAV"):
for filename in filenames:
doc_path = os.path.join(filepath,filename)
doc_values = write_word(doc_path)
wb = load_workbook('D:/install/desktop/Tracker.xlsx')
ws2 = wb['SAV']
rows = ws2.max_row
columnA_data = []
for i in range(1, rows):
cell_value = ws2.cell(row=i+1, column=1).value
columnA_data.append(cell_value)
if doc_values[0] in columnA_data:
print("文件{}已被写入excel".format(doc_values[0]))
else:
ws2.append(doc_values)
wb.save('D:/install/desktop/Tracker.xlsx')
print('保存成功')
更多推荐
已为社区贡献3条内容
所有评论(0)