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

server/2025/3/4 17:56:16/

任务

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

解决方案

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

python">word">import fnmatch,os,sys,win32com.client
wordapp = win32com.client.gencache.EnsureDispatch ("Word.Application")
word">try:word">for path,dirs,files word">in os.walk(sys.argv[1]):word">for filename word">in files:word">if word">not fnmatch.fnmatch(filename,'*.doc'):word">continuedoc = os.path.abspath(os.path,join(path,filename))word">print "processing %s" % docwordapp.Documents.Open(doc)docastxt = doc[:-3]+'txt'wordapp.ActiveDocument.SaveAs(docastxt,FileFormat=win32com.client.constants.wdFormatText)wordapp.ActiveDocument.Close()
word">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/。但这里不准备探讨这两种方式。


http://www.ppmy.cn/server/172392.html

相关文章

40岁开始学Java:Java中单例模式(Singleton Pattern),适用场景有哪些?

在Java中,单例模式(Singleton Pattern)用于确保一个类只有一个实例,并提供全局访问点。以下是详细的实现方式、适用场景及注意事项: 一、单例模式的实现方式 1. 饿汉式(Eager Initialization) …

WeakAuras Lua Script TOC

十字军的试炼,刺骨之寒,插件,团队高亮提示 WA-Script字符串: !WA:2!TRZAZTX11PLWVeKJJinRQTIscmTScPenkbPeRTNWKcqckbl(YaGKY6XaSl2lWUwG7UE3f8HsDQnRQTCDSDmRJTgBpojCC80jXX2f2v2wtI)G6FGZWPJh2V0pOXK2AM(KTnoTnzCp37DxGfGlOivt…

【子网掩码计算器:Python + Tkinter 实现】

子网掩码计算器:Python Tkinter 实现 引言代码功能概述代码实现思路1. 界面设计2. 功能实现3. 事件处理 子网掩码计算器实现步骤1. 导入必要的库2. 定义主窗口类 SubnetCalculatorApp3. 创建菜单栏4. 创建界面组件5. 判断 IP 地址类别6. 计算子网信息7. 其他功能函…

leetcode 76. 最小覆盖子串

题目如下 数据范围 首先本题可以利用不定长的滑动窗口思想不断枚举右端同时检查窗口是否符合题意。 但是这样做每次新枚举一个窗口都要检查造成了很多重复计算。 我们发现其实每次变化要么是少一个字符要么是多一个字符而中间的根本没变。 所以,我们令字符串t出…

Linux:TCP和守护进程

一、TCP网络程序 1.1 TCP服务端 成员变量: int _listensock; // 监听的文件描述符 string _ip; // 服务端ip uint16_t _port; // 端口号 bool _isrunning; // 服务器是否在运行 1.1.1 InitServer-创建服务端 1、创建套接字socket socket()打开一个网络通讯端…

【软件测试】_selenium自动化测试:定位元素与点击元素

目录 1. CSS定位与XPath定位 1.1 以百度搜索栏和百度一下按钮了解元素定位 1.2 关于CSS和XPath位置的获取方法 2. 以输出百度热搜词条文本为例使用元素定位 2.1 使用开发者页面获取目标元素的CSS或XPath位置 2.2 使用selenium编写自动测试代码 2.3 查看自动测试结果 3. …

机器学习数学基础:35.效度

效度全攻略:从理论到实践的深度剖析 一、效度(Validity)入门:揭开精准测量的面纱 效度,简单来说,就是测量工具能否准确命中目标的“命中率”。想象你手中有一把枪(测量工具)&#…

C++ MySQL ORM接口设计优化:从宏污染到现代流式API

(基于编译期反射与链式调用的ORM框架重构实践) 在C中设计一个优雅的MySQL ORM接口,既要兼顾易用性,又要保障性能与类型安全。 本文针对开发者常见的宏污染、元数据冗余、API臃肿等问题,结合现代C特性提出一套优化方案…