使用python-docx模块解析docx文档

python中有python-docx及pypiwin32模块处理docx文件,python-docx模块跨平台性好,但是只能解析.docx文件,不能解析.doc文件,其可以按照段落读取word。pypiwin32模块可以处理.doc及.docx文件,但是仅限windows平台,它还可以将.doc文件转化为.docx文件,然后使用python-docx模块进行处理。

download_document.py

将网上的doc文件下载到本地,使用pypiwin32模块将其转化为docx文件

import os

import requests
import win32com.client as wc
from parse_docx import *


url = "http://www.bjshy.gov.cn/ggzyjy/u/cms/com.ggzyjy.www/202110/14180513poiq.doc"

file_name = url.split('/')
# print("file_name=",file_name[-1])

# #拼接下载文件的路径,并将响应内容写入本地文件
download_file_path = os.path.join(DOC_DIR,file_name[-1])
response = requests.get(url)
with open(download_file_path,'wb') as f:
    f.write(response.content)

#获取doc文件路径并将其转为docx文件存到本地
for file in os.listdir(DOC_DIR):
    if file.endswith('.doc'):
        print("file=",file)
        #拼接转化为docx文件的文件名称
        file_name = file.split('.')[0]
        print("file_name=", file_name)
        name = file_name + ".docx"

        doc_file_path = os.path.join(DOC_DIR,file)
        print("doc_file_path=",doc_file_path)
        #doc文件另存为docx文件处理
        word = wc.Dispatch("Word.Application")
        doc = word.Documents.Open(doc_file_path)
        # print("doc=",doc)   #doc= 14180513poiq.doc
        # print("type(doc)=",type(doc))   #type(doc)= <class 'win32com.client.CDispatch'>

        #拼接docx文件保存的本地路径
        docx_file_path = os.path.join(DOCX_DIR,name)
        doc.SaveAs(docx_file_path,12)
        doc.Close()
        word.Quit()

parse_docx.py

#解析本地docx文件中的内容,输出每个段落及表格中的内容

import os
import docx
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
print("BASE_DIR=",BASE_DIR)

DOC_DIR = os.path.join(BASE_DIR,'doc')

DOCX_DIR = os.path.join(DOC_DIR,'docx')


FILE1_DIR = os.path.join(DOC_DIR,'file1')
print("FILE1_DIR=",FILE1_DIR)

def get_file_name(file_dir):
    for root,dirs,files in os.walk(file_dir):
        print("root=",root)
        print("dirs=",dirs)
        print("files=",files)  #files= ['xxx.docx']
    return files[0]


if __name__ == "__main__":
    file_name = get_file_name(FILE1_DIR)
    print("file_name=", file_name)
    file1_path = os.path.join(FILE1_DIR, file_name)
    print("file1_path", file1_path)

    file_content = docx.Document(file1_path)
    print("file_content=", file_content)

    #读取word文档中段落的内容
    for p in file_content.paragraphs:
        print("p.text=", p.text)

    #读取word文档中表格中的内容
    for table in file_content.tables:
        print("table=",table)
        for row in table.rows:
            for cell in row.cells:
                print("cell.text=",cell.text)

    #方法二
    # for table in file_content.tables:
    #     print("table=",table)
    #     #行列个数
    #     row_count = len(table.rows)
    #     col_count = len(table.columns)
    #     print("row_count=",row_count)
    #     print("col_count=",col_count)
    #     for i in range(row_count):
    #         for j in range(col_count):
    #             print("cell.text=",table.cell(i, j).text)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值