栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

用python提取word到excel(excel可更新)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用python提取word到excel(excel可更新)

接了一个小单,需求是:

  1. 用Python实现自动生成并更新Tracker表格。
  2. Tracker表格中有两个sheet,分别对应相同名字的文件夹,SAV是doc文件合集,每个文件夹将会有上百个文件(目前只放了几个用于测试,实际上需要录入七八百个文件),需要实现自动按照ID的顺序将信息自动录入Tracker这个excel中。
  3. 待提取内容部分来自表格,部分来自文本。
  4. 当文件夹中加入新文件时,再次运行代码可以更新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:installdesktopAMSAV"):
        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:installdesktopAMSAV"):
        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('保存成功')

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1034397.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号