https://python-docx.readthedocs.io/en/latest/index.html
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')
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)