当前位置: 首页 > news >正文

Python Cookbook-2.27 从微软 Word 文档中抽取文本

任务

你想从 Windows 平台下某个目录树中的各个微软 Word 文件中抽取文本,并保存为对应的文本文件。

解决方案

借助 PyWin32 扩展,通过COM 机制,可以利用 Word 来完成转换:

import fnmatch,os,sys,win32com.client
wordapp = win32com.client.gencache.EnsureDispatch ("Word.Application")
try:
	for path,dirs,files in os.walk(sys.argv[1]):
		for filename in files:
			if not fnmatch.fnmatch(filename,'*.doc'):continue
			doc = os.path.abspath(os.path,join(path,filename))
			print "processing %s" % doc
			wordapp.Documents.Open(doc)
			docastxt = doc[:-3]+'txt'
			wordapp.ActiveDocument.SaveAs(docastxt,FileFormat=win32com.client.constants.wdFormatText)
			wordapp.ActiveDocument.Close()
finally:
#确保即使有异常发生word仍能被正常关闭
wordapp.Quit()

讨论

关于 Windows应用程序的一个有趣的地方是,可以通过COM以及Python 提供的PyWin32 扩展,编写一些简单的脚本对这些应用程序进行控制。这个扩展允许你用Python 脚本来完成各种 Windows 下的任务。本节的脚本,从目录树下的所有的 Word文档(即.doc 文件)中抽取文本,并存为对应的.txt文本文件。通过使用 os.walk 函数,并利用 for循环语句,我们无须递归即可遍历树中的所有子目录。通过 fnmatch.fnmatch函数,可以检查文件名以确认它是否符合我们给出的通配符,这里的通配符是“.doc”一旦我们确认了这是一个 Word 文档,我们就用此文件名和 os.path 来得到一个绝对路径,再用 Word 打开它,存为文本文件,然后关闭。

如果没有安装Word,可能需要完全不同的方法来达成目标。一种可能是使用OpenOMice.org,它也可以载入 Word 文档。另一种可能是使用可以读取 Word 文档的程序,比如 Antiword,其网址是 http://www,winfield.demon.nl/。但这里不准备探讨这两种方式。

相关文章:

  • AIGC(生成式AI)试用 26 -- 跟着清华教程学习 - DeepSeek与AI幻觉
  • 奖学金(acwing)c++
  • LeetCode-81. 搜索旋转排序数组 II
  • Python请求微店商品详情数据API接口
  • 几道考研数学题求解
  • 【c++初阶】C++内存管理
  • hive之lag函数
  • RagFlow专题二、RagFlow 核心架构(数据检索、语义搜索与知识融合)
  • 计算机毕业设计SpringBoot+Vue.js在线问卷调查系统(源码+文档+PPT+讲解)
  • FPGA开发,使用Deepseek V3还是R1(7):以“FPGA的整体设计框架”为例
  • Linux 基本命令
  • MySQL 常用命令大全:增删改查与更多操作
  • B站上优质的Java和SpringBoot相关视频教程
  • mysql中事务的基本概念
  • Docker 学习(一)
  • 7. 从网络获取数据
  • 三十五周学习周报
  • MaxCompute x DataWorks × DeepSeek,实现使用自定义数据集微调DeepSeek-R1蒸馏模型
  • 011 rocketmq过滤消息
  • 若依框架修改为多租户
  • 最高法、证监会:常态化开展证券纠纷代表人诉讼,降低投资者维权成本
  • 杨文庄当选中国人口学会会长,曾任国家卫健委人口家庭司司长
  • 为什么越来越多景区,把C位留给了书店?
  • 普京确定俄乌谈判俄方代表团名单
  • 广东省原省长卢瑞华逝世,享年88岁
  • 市场监管总局等五部门约谈外卖平台企业