Python資料爬蟲學習筆記(1)讀取併合並Excel
阿新 • • 發佈:2018-12-22
需求:寫一個Python程式,實現多個Excel表格的合併。
準備:
在E盤3個待合併的測試檔案,如下所示:
在每個檔案中的sheet1和sheet2中隨便寫點東西。
(1)簡便方法:
import openpyxl wb1 = openpyxl.load_workbook() wb2 = openpyxl.load_workbook() wb3 = openpyxl.load_workbook() wb = openpyxl.Workbook() wsheet = wb.active (wb): sheet = wb.active column = sheet.max_column column (wbcolumn): ws = wb.active row_obj (ws.rows): t = (row_obj) temp = [] j (column): temp.append(t[j].value) wsheet.append(temp) column1 = get_column(wb1) column2 = get_column(wb2) column3 = get_column(wb3) do_append(wb1column1) do_append(wb2column2) do_append(wb3column3) wb.save()
(2)複雜方法,考慮了不同Sheet之間的關係:
import xlrd,xlsxwriter #設定要合併的所有檔案 allxls=["E:/1.xls","E:/2.xls","E:/3.xls"] #設定合併到的檔案 endxls ="E:/4.xls" #開啟表格 def open_xls(file): try: fh=xlrd.open_workbook(file) return fh except Exception as e: print(str("打開出錯,錯誤為:"+e)) #獲取所有sheet def getsheet(fh): return fh.sheets() #讀取某個sheet的行數 def getnrows(fh,sheet): table=fh.sheets()[sheet] content=table.nrows return content #讀取某個檔案的內容並返回所有行的值 def getfilect(fh,fl,shnum): fh=open_xls(fl) table=fh.sheet_by_name(shname[shnum]) num=getnrows(fh,shnum) lenrvalue=len(rvalue) for row in range(0,num): rdata=table.row_values(row) rvalue.append(rdata) #print(rvalue[lenrvalue:]) filevalue.append(rvalue[lenrvalue:]) return filevalue #儲存所有讀取的結果 filevalue=[] #儲存一個標籤的結果 svalue=[] #儲存一行結果 rvalue=[] #儲存各sheet名 shname=[] #讀取第一個待讀檔案,獲得sheet數 fh=open_xls(allxls[0]) sh=getsheet(fh) x=0 for sheet in sh: shname.append(sheet.name) svalue.append([]) x+=1 #依次讀取各sheet的內容 #依次讀取各檔案當前sheet的內容 for shnum in range(0,x): for fl in allxls: print("正在讀取檔案:"+str(fl)+"的第"+str(shnum)+"個標籤的…") filevalue=getfilect(fh,fl,shnum) svalue[shnum].append(filevalue) #print(svalue[0]) #print(svalue[1]) #由於append具有疊加關係,分析可得所有資訊均在svalue[0][0]中儲存 #svalue[0][0]元素數量為sheet標籤數(sn)*檔案數(fn) sn=x fn=len(allxls) endvalue=[] #設定一個函式專門獲取svalue裡面的資料,即獲取各項標籤的資料 def getsvalue(k): for z in range(k,k+fn): endvalue.append(svalue[0][0][z]) return endvalue #開啟最終寫入的檔案 wb1=xlsxwriter.Workbook(endxls) #建立一個sheet工作物件 ws=wb1.add_worksheet() polit=0 linenum=0 #依次遍歷每個sheet中的資料 for s in range(0,sn*fn,fn): thisvalue=getsvalue(s) tvalue=thisvalue[polit:] #將一個標籤的內容寫入新檔案中 for a in range(0,len(tvalue)): for b in range(0,len(tvalue[a])): for c in range(0,len(tvalue[a][b])): #print(linenum) #print(c) data=tvalue[a][b][c] ws.write(linenum,c,data) linenum+=1 #疊加關係,需要設定分割點 polit=len(thisvalue) wb1.close()