1. 程式人生 > >Python資料爬蟲學習筆記(1)讀取併合並Excel

Python資料爬蟲學習筆記(1)讀取併合並Excel

需求:寫一個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()

感謝韋瑋老師的指導