python处理doc和docx

本文介绍了如何使用Python的win32com库将Doc文件转换为Docx,并提供了详细步骤。转换过程中强调了使用gencache.EnsureDispatch以及正确设置SaveAs2的参数。此外,还展示了如何利用python-docx读取和分析Docx文档内容,包括统计段落数量。转换和读取过程对于批量处理和自动化文档分析非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://python-docx.readthedocs.io/en/latest/index.html
https://docs.microsoft.com/zh-cn/office/vba/api/word.documents.open

https://blog.csdn.net/smile_to_the_world/article/details/105090233
https://blog.csdn.net/qq_22521211/article/details/80278371
https://www.cnblogs.com/TensorSense/p/7413297.html

从网上找到很多类似的文章,代码都差不多,使用之后发现不好用,总是报错。偶然间看到某位大神的代码,是可以用的,也是我唯一找到的可以用的把doc转化为docx的代码:

# encoding=utf-8
 
from win32com import client as wc
 
w = wc.gencache.EnsureDispatch('kwps.application')
doc = w.Documents.Open(r"E:\Python\project\pro1\lala.doc")
doc.SaveAs2(r"E:\Python\project\pro1\fafa.docx", 12)

注意:

  1. 需要用到win32com这个包,不是Python内建的,需要通过python -m pip install pypiwin32安装。

  2. 要用gencache.EnsureDispatch这个函数才行,网上其他大神用的方法不行。另外,如果你的电脑只安装了WPS,函数参数就得是“kwps.application”,如果有Office,参数就不是这个了。

  3. Open方法内的文件路径得用绝对路径,用相对路径的话我反正报错。

  4. 另存为不用SaveAs,要用SaveAs2,参数是绝对路径。

  5. SaveAs2的第二个参数是12,表示保存为docx格式,我之前参考别的大神的代码,用的是16,虽然看起来保存的确实是docx,但是当我通过Python-docx读取这个文件的时候就出错了,后来通过某位大神的评论才知道要用12,切记。

最近想统计word文档中的一些信息,人工统计的话。。。三天三夜吧
python 不愧是万能语言,发现有一个包叫做 docx,非常好用,具体查看官方文档:https://python-docx.readthedocs.io/en/latest/index.html
(v0.8.6)

还有一个是 win32com 包,这个包安装步骤如下:
http://jingyan.baidu.com/article/d3b74d64c853081f77e60929.html

安装好 win32com之后安装 docx包:

pip install  python-docx
import docx
from win32com import client as wc
import matplotlib.pyplot as plt
from collections import Counter 
import os
# 首先将doc转换成docx
word = wc.Dispatch("Word.Application")

# 找到word路径 + 文件名 ,即可打开文件

full_path = 'C:\\Users\\ASUS\\Desktop\\test.docx'
doc = word.Documents.Open(full_path)

# 使用参数16表示将doc转换成docx,保存成docx后才能 读文件

doc.SaveAs(r"D:\\test2.docx",16)
doc.Close()
word.Quit()


# 读取word内容
# 这里是以段落为单位的,下面用一个for 遍历所有段落

doc = docx.Document("D:\\test2.docx")
parag_num = 0
for para in doc.paragraphs :
    print(para.text)
    parag += 1  
print ('This document has ', parag, ' paragraphs')

将doc转为docx:

  from win32com import client as wc

        word = wc.Dispatch("Word.Application")

        doc = word.Documents.Open(路径+名称.doc)

        doc.SaveAs(路径+名称.docx, 12)   12docx

        doc.Close()

        word.Quit()

读取段落:

  import docx

        docStr = Document(docName)   打开文档

        for paragraph in docStr.paragraphs:

                parStr = paragraph.text

                --》paragraph.style.name == 'Heading 1'  一级标题   

                --》paragraph.paragraph_format.alignment == 1  居中显示

                --》paragraph.style.next_paragraph_style.paragraph_format.alignment == 1  下一段居中显示

                --》paragraph.style.font.color

读取表格:

   numTables = docStr.tables

        for table in numTables:

                #行列个数

                row_count = len(table.rows)

                col_count = len(table.columns)

                for i in range(row_count):

                        row = table.rows[i].cells

                        i行j列内容:row[j].text

           或者:

                    row_count = len(table.rows)
                    col_count = len(table.columns)
                    for i in range(row_count):
                            for j in range(col_count):
                                    print(table.cell(i,j).text)

### 使用 Python 将 `.doc` 文件转换为 `.docx` 格式 为了实现这一目标,可以利用 `office.word.doc2docx()` 函数来完成转换工作。此方法简单有效,并能确保文件格式兼容性[^2]。 下面提供一段完整的代码示例,该脚本不仅能够单独转换单个 `.doc` 文件至 `.docx`,还支持批量处理指定目录下的所有 `.doc` 文档: ```python import os from office import word path = "D:\\wrodexact\\Docx" # 设置要扫描的文件夹路径 files = [] # 遍历给定路径中的所有文件 for file in os.listdir(path): if file.endswith(".doc"): full_path = os.path.join(path, file) files.append(full_path) # 对每一个找到的 .doc 文件进行转换 for doc_file in files: try: new_name = os.path.splitext(doc_file)[0] + ".docx" word.doc2docx(doc_file, new_name) # 调用函数执行转换操作 print(f"{doc_file} 已成功转换.") # 可选:移除原始 .doc 文件以节省空间 os.remove(doc_file) print(f"{doc_file} 删除成功!") except Exception as e: print(f"转换 {doc_file} 失败: {e}") ``` 这段代码首先定义了一个待查找 `.doc` 文件的目标文件夹位置;接着遍历这个文件夹内所有的条目,仅保留扩展名为 `.doc` 的项目;最后对于每一份匹配上的文档调用了 `word.doc2docx()` 方法将其保存为新的 `.docx` 版本[^3]。 值得注意的是,在实际应用过程中可能会遇到由于多线程或资源竞争引起的问题,比如当尝试关闭 Word 应用实例的同时另一个请求又试图启动它时就会触发错误。为了避免这种情况的发生,建议每次只运行单一的任务实例直到其完全结束再继续下一个任务[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值