我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python:读取 .doc、.docx

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python:读取 .doc、.docx

概述

Python 中可以读取 word 文件的库有 python-docxpywin32

下表比较了各自的优缺点。

  优点 缺点
python-docx 跨平台 只能处理 .docx 格式,不能处理.doc格式
pywin32 仅限 windows 平台 .doc 和 .docx 都能处理

pywin32

这个库很强大,不仅仅可以读取 word,本文仅介绍其读取 word 功能。网上介绍用 pywin32 读取 .doc 的文章真不多,因为,真心不好用

以下是 pywin32 读取 .doc 的代码示例,但是读取表格有问题,输出全是空,原因不明,因为不打算用所以没有深入研究。另外,如果表格中有纵向合并单元格,会报错:“无法访问此集合中单独的行,因为表格有纵向合并的单元格。”

from win32com.client import Dispatch

word = Dispatch('Word.Application')     # 打开word应用程序
# word = DispatchEx('Word.Application') # 启动独立的进程
word.Visible = 0        # 后台运行,不显示
word.DisplayAlerts = 0  # 不警告

path = r'E:\abc\test.doc'
doc = word.Documents.Open(FileName=path, Encoding='gbk')

for para in doc.paragraphs:
    print(para.Range.Text)

for t in doc.Tables:
    for row in t.Rows:
        for cell in row.Cells:
            print(cell.Range.Text)

doc.Close()
word.Quit

但是 pywin32 有另外一个功能,就是将 .doc 格式另存为 .docx 格式,这样我们就可以使用 python-docx 来处理了。

# 将 .doc 文件转成 .docx 
def doc2docx(path):
    w = win32com.client.Dispatch('Word.Application')
    w.Visible = 0
    w.DisplayAlerts = 0
    doc = w.Documents.Open(path)
    newpath = os.path.splitext(path)[0] + '.docx'
    doc.SaveAs(newpath, 12, False, "", True, "", False, False, False, False)
    doc.Close()
    w.Quit()
    os.remove(path)
    return newpath

python-docx

python-docx 可以按段落读取 word,对于表格,可以单独的提取,代码如下:

import docx

fn = r'E:\abc\test.docx'
doc = docx.Document(fn)

for paragraph in doc.paragraphs:
        print(paragraph.text)

for table in doc.tables:
    for row in table.rows:
        for cell in row.cells:
            print(cell.text)

对于纵向合并单元格,python-docx 的处理也很贴心。看下面的截图:

word 表格截图:



代码运行结果截图:
 

综上所述,对于大批量 word 文件的读取,我建议使用 python-docx 库,若是 .doc 文件,则用 pywin32 库将其转化为 .docx 文件,然后再调用 python-docx 库读取。

Word 未能引发事件

这是我遇到的一个实际问题,困扰了我半天时间。

我的爬虫在爬取到 .doc 文件之后,就通过上面的方法将其转为 .docx 格式,原本一切都好,下班挂机在跑,第二天来一看,报了这个错:pywintypes.com_error: (-2147352567, '发生意外。', (0, 'Microsoft Word', 'Word 未能引发事件。', 'D:\工具\Microsoft Office\Office12\2052\WDMAIN11.CHM', 25482, -2146822286), None)


我用报错的文件单独调试了 doc2docx 方法,并没有报错。网上查了这个错误,没有啥收获。

反复测试后发现总是那个网页报错,说明 bug 可以重现,那么问题到底出在哪里?

我将代码一行行删去,直到只留下执行到报错所必须的代码:

def get_winningbid_detail(url, name):
    r = requests.get(url)
    r.encoding = 'utf-8'
    html = r.text
    soup = BeautifulSoup(html, 'lxml')

    ps = soup.find_all(text=re.compile('附件'))
    if len(ps) > 0:
        os.makedirs(os.path.join(download_dir, name), exist_ok=True)
        for p in ps:
            a_tab = p.find_next_sibling('a')
            if a_tab is not None:
                link = homepage + a_tab['href']
                localfilename = os.path.join(download_dir, name, a_tab.text)
                # print(localfilename)
                with open(localfilename, 'wb+') as sw:
                    sw.write(requests.get(link).content)
                if localfilename.endswith('.doc'):
                    doc2docx(localfilename)

反复读这段代码,并没有发现什么问题。

因为有些网页的附件名称是相同的,例如 "公告.doc",所以我按每个网页的标题(在总览页面爬到的)分文件夹放置下载的文件,所以方法中传了一个 name 参数,而如果 name 参数传空,则不会报错。

其实由此已经可以发现 bug 所在了,但我却没想到,又反复折腾了很久才发现,原来是文件名太长了。

在 windows 下面,单个文件名的长度限制是 25,完整的路径长度(如 E:\abc\test.doc )限制是 260。路径最后有一个字符串结束符 '\0' 要占掉一个字符,所以完整路径实际限长是259。**

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python:读取 .doc、.docx

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python:读取 .doc、.docx

概述Python 中可以读取 word 文件的库有 python-docx 和 pywin32。下表比较了各自的优缺点。 优点缺点python-docx跨平台只能处理 .docx 格式,不能处理.doc格式pywin32仅限 windows
2023-01-30

使用python-docx读取doc,d

API:    http://python-docx.readthedocs.io/en/latest/#api-documentation将doc转为docx:        from win32com import client as
2023-01-31

python 操作 doc /docx

对于python来说操作 doc    需要用到win32com      安装   pip  install  win32com      优点 doc所有的操作都可以执行     缺点 如果没有office就死翘翘了 当然也可以com 
2023-01-31

Go怎么实现自动解压缩包及读取docx/doc文件内容

这篇文章主要介绍“Go怎么实现自动解压缩包及读取docx/doc文件内容”,在日常操作中,相信很多人在Go怎么实现自动解压缩包及读取docx/doc文件内容问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go怎
2023-07-05

python读取docx文件,就是如此简单

中文编码问题总是让人头疼(尤其是mac本),想要用Python读取word中的内容。用open()经常报错,通过百度搜索+问身边小伙伴发现了Python有专门读取.docx的模块python_docx。本篇文章主要来解决一个读取docx文件
2023-06-01

android怎么读取doc文件

Android系统本身并不支持直接读取doc文件,但是可以使用第三方应用或库来实现读取doc文件的功能。以下是一种常见的方法:下载并安装一个支持读取doc文件的应用,比如Microsoft Word、Google Docs等。使用Andr
android怎么读取doc文件
2024-03-02

Python-docx:读写word文档

1Python DocX目前是Python OpenXML的一部分,你可以用它打开Word 2007及以后的文档,而用它保存的文档可以在Microsoft Office 2007/2010, Microsoft Mac Office 200
2023-01-31

怎么在python中将docx与doc文件进行转换

怎么在python中将docx与doc文件进行转换?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。from win32com import client#转换doc为docx
2023-06-09

Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容

前言 想要做全文搜索引擎,则需要将word/pdf等文档内容提取出来。对于pdf有xpdf等一些开源方案。但Word文档的情况则会复杂一些。 提取PDF文本内容XPDF是一个免费开源的软件,用于显示PDF文件,并可将pdf转换成文字图片等,
2022-06-04

python大批量读写.doc文件的解决

python大批量读写.doc文件分析前言:java语言读写.doc的出现乱码问题:      大家都知道当我们利用java语言读写.doc文件时,无论是利用流的方式将.doc文件的内容输出到控制台(console),还是将其写到其他文件中
2023-01-31

Python读取指定目录下指定后缀文件并保存为docx

最近有个奇葩要求 要项目中的N行代码 申请专利啥的 然后作为程序员当然不能复制粘贴 用代码解决。。 使用python-docx读写docx文件 环境使用python3.6.0 首先pip安装python-docx pip install p
2022-06-04

教你用十行node.js代码读取docx的文本

前言 最近有一个case。需要去解析word文档。有两个需求,一个是将word文档转成PDF,一个是将word文档中的内容按照一定的规范读取到数据库中,去npm仓库找了大概有十几个包,发现主要是通过以下的方式来转换代码。通过调用系统底层程序
2022-06-04

如何使用 Synapse 从 ADLS gen2 读取 python 中的 pdf 或 pptx 或 docx 文件?

问题内容我希望在 synapse 笔记本中使用 python 读取不同格式的文件。其中包括 .pdf、.pptx、.docx、.msg 和 .eml。我希望能够读取文件,然后用 python 解析和操作它们。我能够使用不同的 python
如何使用 Synapse 从 ADLS gen2 读取 python 中的 pdf 或 pptx 或 docx 文件?
2024-02-10

Python中怎么对docx文件进行读写操作

这期内容当中小编将会给大家带来有关Python中怎么对docx文件进行读写操作,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。演示文本为了方便理解,我们以 python-docx.docx 文件为例,演示如
2023-06-16

python怎么实现对doc,txt,xls文档的读写操作

本篇内容介绍了“python怎么实现对doc,txt,xls文档的读写操作”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.python实现
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录