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)
注意:
需要用到win32com这个包,不是Python内建的,需要通过python -m pip install pypiwin32安装。
要用gencache.EnsureDispatch这个函数才行,网上其他大神用的方法不行。另外,如果你的电脑只安装了WPS,函数参数就得是“kwps.application”,如果有Office,参数就不是这个了。
Open方法内的文件路径得用绝对路径,用相对路径的话我反正报错。
另存为不用SaveAs,要用SaveAs2,参数是绝对路径。
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) 12为docx
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)