python中有python-docx及pypiwin32模块处理docx文件,python-docx模块跨平台性好,但是只能解析.docx文件,不能解析.doc文件,其可以按照段落读取word。pypiwin32模块可以处理.doc及.docx文件,但是仅限windows平台,它还可以将.doc文件转化为.docx文件,然后使用python-docx模块进行处理。
download_document.py
将网上的doc文件下载到本地,使用pypiwin32模块将其转化为docx文件
import os import requests import win32com.client as wc from parse_docx import * url = "http://www.bjshy.gov.cn/ggzyjy/u/cms/com.ggzyjy.www/202110/14180513poiq.doc" file_name = url.split('/') # print("file_name=",file_name[-1]) # #拼接下载文件的路径,并将响应内容写入本地文件 download_file_path = os.path.join(DOC_DIR,file_name[-1]) response = requests.get(url) with open(download_file_path,'wb') as f: f.write(response.content) #获取doc文件路径并将其转为docx文件存到本地 for file in os.listdir(DOC_DIR): if file.endswith('.doc'): print("file=",file) #拼接转化为docx文件的文件名称 file_name = file.split('.')[0] print("file_name=", file_name) name = file_name + ".docx" doc_file_path = os.path.join(DOC_DIR,file) print("doc_file_path=",doc_file_path) #doc文件另存为docx文件处理 word = wc.Dispatch("Word.Application") doc = word.Documents.Open(doc_file_path) # print("doc=",doc) #doc= 14180513poiq.doc # print("type(doc)=",type(doc)) #type(doc)= <class 'win32com.client.CDispatch'> #拼接docx文件保存的本地路径 docx_file_path = os.path.join(DOCX_DIR,name) doc.SaveAs(docx_file_path,12) doc.Close() word.Quit()
parse_docx.py
#解析本地docx文件中的内容,输出每个段落及表格中的内容
import os import docx BASE_DIR = os.path.dirname(os.path.abspath(__file__)) print("BASE_DIR=",BASE_DIR) DOC_DIR = os.path.join(BASE_DIR,'doc') DOCX_DIR = os.path.join(DOC_DIR,'docx') FILE1_DIR = os.path.join(DOC_DIR,'file1') print("FILE1_DIR=",FILE1_DIR) def get_file_name(file_dir): for root,dirs,files in os.walk(file_dir): print("root=",root) print("dirs=",dirs) print("files=",files) #files= ['xxx.docx'] return files[0] if __name__ == "__main__": file_name = get_file_name(FILE1_DIR) print("file_name=", file_name) file1_path = os.path.join(FILE1_DIR, file_name) print("file1_path", file1_path) file_content = docx.Document(file1_path) print("file_content=", file_content) #读取word文档中段落的内容 for p in file_content.paragraphs: print("p.text=", p.text) #读取word文档中表格中的内容 for table in file_content.tables: print("table=",table) for row in table.rows: for cell in row.cells: print("cell.text=",cell.text) #方法二 # for table in file_content.tables: # print("table=",table) # #行列个数 # row_count = len(table.rows) # col_count = len(table.columns) # print("row_count=",row_count) # print("col_count=",col_count) # for i in range(row_count): # for j in range(col_count): # print("cell.text=",table.cell(i, j).text)