查看原文
其他

【实用脚本】 word文件转txt文件

码中人 码农真经 2024-02-11

File Converter - Convert & compress everything in 2 clicks![1]

File Converter is a very simple tool which allows you to convert and compress one or several file(s) using the context menu in windows explorer.

文件转换器(File Converter)是我非常喜欢的一个工具,它可以在Windows资源管理器中添加一个右键菜单,可以将文件转换为其他格式。比如,我经常将JPG/PNG的图片转成 WebP 格式,这样可以减少图片的大小,提高网页的加载速度。

同样,我也经常将Word文档转成txt文件,这样可以很方便的检索文档内容。

但是,File Converter 并不支持将Word文档转成txt文件。因此,我写了一个 Python 脚本,临时将Word文档转成txt文件。希望对你有用。


word 格式

微软的Word文档有两种格式:

  1. 1. .doc:这是Microsoft Word的旧版文件格式,用于Microsoft Office 97-2003。它是二进制文件格式,包含了文档的所有元素(如文本、图像、表格等)和格式。

  2. 2. .docx:这是Microsoft Word 2007及以后版本的默认文件格式。它是基于XML的文件格式,比.doc文件更加紧凑、更有效率。.docx文件实际上是一个压缩文件,包含了多个目录和XML文件,这些文件描述了文档的结构和内容。

.docx文件比.doc文件有更好的数据恢复能力,因为它们是由多个组件组成的,如果一个组件损坏,其他组件可能仍然完好。此外,.docx文件通常比.doc文件小,因为它们使用了ZIP压缩。

然而,.doc文件在旧版的Word软件中有更好的兼容性。如果你需要在没有安装最新版Microsoft Word的计算机上打开文件,可能需要使用.doc格式。

pypandoc

Pandoc是使用Haskell语言编写的一款跨平台、自由开源及命令行界面的标记语言转换工具,可实现不同标记语言间的格式转换,堪称该领域中的“瑞士军刀”。

Pandoc

pypandoc · PyPI[2]

pypandoc 是 Python 的一个库,可以用来调用 pandoc 命令行工具,将文件转换成其他格式。

安装

在安装 pypandoc 之前,需要先安装 pandoc 命令行工具。

Releases · jgm/pandoc[3]

这个 Pandoc 安装包还是挺大的,20~30MB,谁让它是“瑞士军刀”呢。

安装完 Pandoc 之后,就可以安装 pypandoc 了。

pip install pypandoc

docx 转 txt

一行代码就可以将 docx 文件转成 txt 文件。

import pypandoc
output = pypandoc.convert_file('some_docx_file.docx''plain', outputfile="somefile.txt")

doc 转 docx

前面说过,word文档有两种格式,.doc 和 .docx。Pandoc 只支持 .docx 格式,不支持 .doc 格式。

Feature request: support .doc (old MS Word) format · Issue #5809 · jgm/pandoc[4]

Pandoc 的作者说,支持 .doc 格式太麻烦了,It would be a ton of work。而且,.doc 格式转成 .docx 格式,是一件很容易的事情,只需要打开 .doc 文件,然后另存为 .docx 文件即可。

顺着这个思路,我们可以先将 .doc 文件转成 .docx 文件。这里,我们使用 win32com 模块来操作 Microsoft Word。

pywin32 是一个 Python 库,它提供了一些用于与 Windows 操作系统进行交互的工具和模块。这个库可以让你在 Python 程序中调用 Windows API,进行一些如操作文件、处理 Windows 事件、操作注册表等任务。例如,你可以使用 pywin32 来创建和操作 COM 对象,这在自动化 Office 应用程序(如 Word 或 Excel)时非常有用。

pip install pywin32

转换代码如下:

def doc_to_docx(doc_path):
    word = win32com.client.Dispatch('Word.Application')
    doc = word.Documents.Open(doc_path)
    docx_path = doc_path.replace('.doc''.docx')
    doc.SaveAs(docx_path, FileFormat=16)  # 16 是 .docx 格式的代码
    doc.Close()

完整代码

import pypandoc
import win32com.client
import glob
import argparse

def docx_to_txt(file_path):
    pypandoc.convert_file(file_path, 'plain', outputfile=file_path.replace('.docx''.txt'))

def doc_to_docx(doc_path):
    word = win32com.client.Dispatch('Word.Application')
    doc = word.Documents.Open(doc_path)
    docx_path = doc_path.replace('.doc''.docx')
    doc.SaveAs(docx_path, FileFormat=16)  
    doc.Close()

def get_word_files(folder_path, extension):
    return glob.glob(folder_path + '/*.' + extension)

def main(folder_path):
    print("convert doc to docx")
    doc_files = get_word_files(folder_path, 'doc')
    for file_path in doc_files:
        print("Converting: " + file_path)
        doc_to_docx(file_path)

    print("convert docx to txt")
    docx_files = get_word_files(folder_path, 'docx')
    for file_path in docx_files:
        print("Converting: " + file_path)
        docx_to_txt(file_path)
    print("All done!")

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('-p''--path'help='path to folder')
    args = parser.parse_args()
    print(args.path)
    main(args.path)

往期推荐


欢迎关注我的公众号“码农真经”,原创技术文章第一时间推送。

引用链接

[1] File Converter - Convert & compress everything in 2 clicks!: https://file-converter.org/
[2] pypandoc · PyPI: https://pypi.org/project/pypandoc/
[3] Releases · jgm/pandoc: https://github.com/jgm/pandoc/releases
[4] Feature request: support .doc (old MS Word) format · Issue #5809 · jgm/pandoc: https://github.com/jgm/pandoc/issues/5809


继续滑动看下一个

【实用脚本】 word文件转txt文件

码中人 码农真经
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存