主要記一下Python對辦公文件的簡單處理,如word、excel、pdf、csv及ppt。因為內容比較多,不細究原理了,直接寫應用吧~
Word
- 寫入Word文件。注:使用了win32com模塊,只能在win系統下使用...
import win32com import win32com.client import os def makeWord(fileName,name): # 打開word應用程序 word=win32com.client.Dispatch("Word.Application") #讓文檔可見 word.Visible=True #創建文檔 doc=word.Documents.Add() #寫內容,從頭開始 r=doc.Range(0,0) #開始插入內容 r.InsertAfter("有人喜歡小溪,是因為沒見過大海。") r.InsertAfter("我看過銀河,可我只愛一粒星--"+name) #存儲文件 doc.SaveAs(path) #關閉文件 doc.Close() #退出word word.Quit() names=["張三","李四","王五"] for name in names: #獲取當前絕對路徑來存放文件 path=os.path.join(os.getcwd(),name) makeWord(path,name)
- 讀取Word文件
import win32com import win32com.client import os def readWord(path): #調用系統word功能,可以處理doc和docx文件 mw=win32com.client.Dispatch("Word.Application") #打開文件 doc=mw.Documents.Open(path) for par in doc.Paragraphs: line=par.Range.Text print(line) #關閉 doc.Close() #退出word mw.Quit() path = os.path.join(os.getcwd(),'張三.docx') readWord(path)
#有人喜歡小溪,是因為沒見過大海。我看過銀河,可我只愛一粒星--張三
Excel
- 寫入xls文件 注:這里使用了pyexcel_xls,需要另行安裝(pip install pyexcel_xls)
#有序字典 from collections import OrderedDict from pyexcel_xls import save_data def makeExce(path,data): #有序字典 dic = OrderedDict() for sheetName,sheetValue in data.items(): d = {} d[sheetName] = sheetValue #此格式的有序字典,sheetName為子表名,sheetValue為表中的數據 dic.update(d) #保存 save_data(path,dic) path = r"C:\Users\Administrator\Desktop\make.xls" #只能寫xls格式的excel文件 makeExce(path,{"表1":[[1,2,3],[4,5,6]],"表2":[[11,22,33],[44,55,66]]})
- 讀取xls 或 xlsx文件
from collections import OrderedDict from pyexcel_xls import get_data def readXls(path): dic=OrderedDict() #抓取數據 xdata=get_data(path) for sheet in xdata: dic[sheet]=xdata[sheet] #返回的是有序字典 return dic path=r"C:\Users\Administrator\Desktop\make.xls" dic=readXls(path) print(dic['表1'][1])
#[4, 5, 6]
PPT
- 寫入PPT
import win32com import win32com.client def makePpt(path): ppt = win32com.client.Dispatch("PowerPoint.Application") # 讓文檔可見 ppt.Visible = True #增加一個文件 pptFile = ppt.Presentations.Add() #創建頁 參數1為頁數(從1開始)參數2為類型(主題) page1 = pptFile.Slides.Add(1,1) t1 = page1.Shapes[0].TextFrame.TextRange t1.Text = "sunck" t2 = page1.Shapes[1].TextFrame.TextRange t2.Text = "sunck is a good man" #保存 pptFile.SaveAs(path) pptFile.close() ppt.Quit() path=r"C:\Users\Administrator\Desktop\make.ppt" makePpt(path)
CSV
- 寫csv文件
import csv def writeCsv(path,data): #使用這個newline=""可以解決win下自動添加空行的問題 with open(path, "w",newline="") as f: writer = csv.writer(f) for row in data:#整行寫入,這里是二維列表,一個一維列表寫為一行 writer.writerow(row) path = r"C:\Users\Administrator\Desktop\make.csv" data = [['admin','admin','admin'],['byadmin','byadmin','byadmin'],['byadmin','byadmin','byadmin']] writeCsv(path,data)
-
讀取csv文件
import csv def readCsv(path): contentList = [] with open(path,"r") as f: allFileInfo = csv.reader(f) for row in allFileInfo: contentList.append(row) return contentList path = r"C:\Users\Administrator\Desktop\make.csv" print(readCsv(path))
#[['admin', 'admin', 'admin'], ['byadmin', 'byadmin', 'byadmin'], ['byadmin', 'byadmin', 'byadmin']]
- 讀PDF PDF轉TXT需安裝pdfminer3k(pip install pdfminer3k)
import sys import importlib importlib.reload(sys) from pdfminer.pdfparser import PDFParser,PDFDocument from pdfminer.pdfinterp import PDFResourceManager,PDFPageInterpreter from pdfminer.converter import PDFPageAggregator from pdfminer.layout import LTTextBoxHorizontal,LAParams from pdfminer.pdfinterp import PDFTextExtractionNotAllowed def readPdf(path,toPath): f=open(path,"rb") #創建一個pdf文檔分析器 parser=PDFParser(f) #創建一個PDF文檔 pdfFile=PDFDocument() #連接分析器與文檔對象 parser.set_document(pdfFile) pdfFile.set_parser(parser) #提供初始化密碼 pdfFile.initialize() #檢測文檔是否提供txt轉換 if not pdfFile.is_extractable: raise PDFTextExtractionNotAllowed else: #解析數據 #數據管理器 manager=PDFResourceManager() #創建一個PDF設備的對象 laparams=LAParams() device=PDFPageAggregator(manager,laparams=laparams) #解析器對象 interpreter=PDFPageInterpreter(manager,device) #開始循環處理,每次處理一頁 for page in pdfFile.get_pages(): interpreter.process_page(page) #處理圖層 layout=device.get_result() for x in layout: if (isinstance(x,LTTextBoxHorizontal)): with open(toPath,"a") as f: str=x.get_text() #print(str) f.write(str+"\n") path=r"C:\Users\Administrator\Desktop\英語語法.pdf" toPath=r"C:\Users\Administrator\Desktop\res.txt" #從pdf文件提取字符保存到txt文件 readPdf(path,toPath)
