在Python中doc转docx,xls转xlsx,ppt转pptx(Windows)

在Python中doc转docx,xls转xlsx,ppt转pptx(Windows)

说明:

  • 首次发表日期:2024-07-18
  • 参考pypi包: doc2docx

缘起

我们一般使用Python开发RAG应用,或者使用基于Python开发的开源RAG工具,比如Dify。然而由于Python中对.doc.ppt格式的文件支持不够好,通常我们需要将文件格式转换为.docx.pptx,以便之后RAG对这些文档进行解析。

通常,我们可以会直接打开Office软件,手动将文件另存为.docx或者.pptx格式。这个过程,我们可以使用Python进行自动化。

在开始之前,首先需要确保微软的Office软件有正常安装好。

依赖

安装pywin32包:

pip install pywin32

导入依赖库:

import win32com.client
from pathlib import Path

doc转docx

参考: https://learn.microsoft.com/en-us/office/vba/api/word.saveas2

def doc2docx(input_filepath, output_filepath, keep_active = True):
    input_filepath = Path(input_filepath).resolve()
    output_filepath = Path(output_filepath).resolve()
    word_app = win32com.client.Dispatch("Word.Application")
    doc = word_app.Documents.Open(str(input_filepath))
    try:
        doc.SaveAs2(str(output_filepath), FileFormat=16)
    except:
        raise
    finally:
        doc.Close(0)
    
    if not keep_active:
        word_app.Quit()

ppt转pptx

参考:

def ppt2pptx(input_filepath, output_filepath, keep_active = True):    
    input_filepath = Path(input_filepath).resolve()
    output_filepath = Path(output_filepath).resolve()
    ppt_app = win32com.client.Dispatch("Powerpoint.Application")
    presentation = ppt_app.Presentations.Open(str(input_filepath), 0, 0, 0)
    try:
        presentation.SaveAs(str(output_filepath), FileFormat=24)
    except:
        raise
    finally:
        presentation.Close()
    
    if not keep_active:
        ppt_app.Quit()

xls转xlsx

参考:

def convert_xls2xlsx(input_filepath, output_filepath, keep_active = True):
    input_filepath = Path(input_filepath).resolve()
    output_filepath = Path(output_filepath).resolve()
    excel_app = win32com.client.Dispatch("Excel.Application")
    sheet = excel_app.Workbooks.Open(str(input_filepath))
    try:
        sheet.SaveAs(str(output_filepath), FileFormat=51)
    except:
        raise
    finally:
        sheet.Close(0)
    
    if not keep_active:
        excel_app.Quit()
posted @ 2024-07-18 20:32  shizidushu  阅读(26)  评论(0编辑  收藏  举报