读取文本、图、表、解压信息
import docx import zipfile import os import shutil '''读取word中的文本''' def gettxt(): file=docx.Document("gao.docx") print("段落数:"+str(len(file.paragraphs)))#段落数为13,每个回车隔离一段 #输出每一段的内容 # for para in file.paragraphs: # print(para.text) #输出段落编号及段落内容 for i in range(len(file.paragraphs)): if len(file.paragraphs[i].text.replace(' ',''))>4: print("第"+str(i)+"段的内容是:"+file.paragraphs[i].text) '''读取word中的table''' def gettable(): doc = docx.Document('word.docx') for table in doc.tables: # 遍历所有表格 print ('----table------') for row in table.rows: # 遍历表格的所有行 # row_str = ' '.join([cell.text for cell in row.cells]) # 一行数据 # print row_str for cell in row.cells: print (cell.text, ' ') '''获取解压后的文件信息''' def getinfo(wordfile): f=zipfile.ZipFile(wordfile,'r') for filename in f.namelist(): f.extract(filename) print(filename) ''' 输出解压后的信息: _rels/ _rels/.rels customXml/ customXml/_rels/ customXml/_rels/item1.xml.rels customXml/_rels/item2.xml.rels customXml/item1.xml customXml/item2.xml customXml/itemProps1.xml customXml/itemProps2.xml docProps/ docProps/app.xml docProps/core.xml docProps/custom.xml docProps/thumbnail.wmf word/ word/_rels/ word/_rels/document.xml.rels word/document.xml word/fontTable.xml word/media/ word/media/image1.jpeg word/numbering.xml word/settings.xml word/styles.xml word/theme/ word/theme/theme1.xml ''' ''' ------获取图: word文档的路径 zip压缩文件的路径 临时解压的tmp路径 最后需要保存的store_path路径 ''' def getpic(path, zip_path, tmp_path, store_path): ''' :param path:源文件 :param zip_path:docx重命名为zip :param tmp_path:中转图片文件夹 :param store_path:最后保存结果的文件夹(需要手动创建) :return: ''' '''=============将docx文件重命名为zip文件====================''' os.rename(path, zip_path) # 进行解压 f = zipfile.ZipFile(zip_path, 'r') # 将图片提取并保存 for file in f.namelist(): f.extract(file, tmp_path) # 释放该zip文件 f.close() '''=============将docx文件从zip还原为docx====================''' os.rename(zip_path, path) # 得到缓存文件夹中图片列表 pic = os.listdir(os.path.join(tmp_path, 'word/media')) '''=============将图片复制到最终的文件夹中====================''' for i in pic: # 根据word的路径生成图片的名称 new_name = path.replace('\', '_') new_name = new_name.replace(':', '') + '_' + i shutil.copy(os.path.join(tmp_path + '/word/media', i), os.path.join(store_path, new_name)) '''=============删除缓冲文件夹中的文件,用以存储下一次的文件====================''' for i in os.listdir(tmp_path): # 如果是文件夹则删除 if os.path.isdir(os.path.join(tmp_path, i)): shutil.rmtree(os.path.join(tmp_path, i)) if __name__ == '__main__': # 源文件 path = r'E:dogcat提取图片log.docx' # docx重命名为zip zip_path = r'E:dogcat提取图片log.zip' # 中转图片文件夹 tmp_path = r'E:dogcat提取图片 mp' # 最后保存结果的文件夹 store_path = r'E:dogcat提取图片测试' m = getpic(path, zip_path, tmp_path, store_path)
至于处理doc文件直接转存成docx文件就可以了
def docTTTTTdocx(doc_name, docx_name):
try: # 首先将doc转换成docx word = client.Dispatch("Word.Application") doc = word.Documents.Open(doc_name) # 使用参数16表示将doc转换成docx doc.SaveAs(docx_name, 16) doc.Close() word.Quit() except: pass
这里如果转换不成功,可能是路径的问题,把doc_name换成完整路径,如下:
from win32com.client import Dispatch
def docToDocxR(docPath, docxPath):
'''将doc转存为docx'''
word = Dispatch('Word.Application')
pathPrefix = sys.path[0]+'\'
print(pathPrefix)
doc = word.Documents.Open(pathPrefix+docPath)
doc.SaveAs(pathPrefix+docxPath, FileFormat=12)
doc.Close()
word.Quit()
参考: