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)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐