欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何用python將文件夾內(nèi)多個excel表格合并成總表

 更新時間:2023年06月14日 09:59:24   作者:jojo__coal  
前幾天遇見這么一個問題,手上有很多張表格,這些表格中都只有一個sheet,需要把這些表匯總到一張表,下面這篇文章主要給大家介紹了關(guān)于如何用python將文件夾內(nèi)多個excel表格合并成總表的相關(guān)資料,需要的朋友可以參考下

前言:

本文講述使用python將需要處理的文件夾內(nèi)多個excel文件內(nèi)容進行合并,并輸出為xlsx格式的總表。就比如一個文件夾里又有許多子文件夾,這些子文件夾里分布有excel文件,這里的python文件就能將這個文件夾內(nèi)的所有excel文件進行合并成總表,不管里面是否還有其他文件格式就比如dox、jpg、py等,更不用說這個文件夾內(nèi)只含有excel文件。

本文還使用了GUI界面使操作更加簡潔,并介紹了將其打包成exe可執(zhí)行文件的步驟,讓它使用的更廣泛了。由于進行了模塊化設(shè)計,各個步驟使用了函數(shù)封裝。

1.引入庫:

需要引入5個庫,分別如下。其中xlrd庫是用于xls格式的讀取,openpyxl庫是用于xlsx格式的讀取,而openpyxl庫既可以用于xls格式的寫入,又可以用于xlsx格式的寫入。os是操作系統(tǒng)的庫,python自帶庫。tkinter是GUI界面的庫,其中filedialog是tkinter中的文件對話框,它的作用類似我們下載一個東西需選擇下在哪個地方的界面。

import xlrd
import os
import openpyxl
import tkinter as tk
import tkinter.filedialog

獲取excel文件的路徑:

這一部分總的代碼如下。

import xlrd
import os
import openpyxl
import tkinter as tk
import tkinter.filedialog

然后分開來單獨看各個代碼的作用

filename = 'C:/Users/86182/Desktop/需要處理的文件夾'
for root, dirs, files in os.walk('{}'.format(filename)):
    print(root)
    print(files)

filename為需要處理的文件夾的絕對路徑,就比如C:/Users/86182/Desktop/需要處理的文件夾,可以自己查看自己電腦某個文件的路徑,這里使用filename是為了之后與其它模塊銜接??梢钥聪螺敵龅慕Y(jié)果:

這串代碼的作用是遍歷需要處理文件夾內(nèi)所有文件,root的作用是返回文件的路徑,而file的作用是以列表形式返還文件名。父文件夾’需要處理的文件夾‘內(nèi)只有兩個子文件夾,分別為’戰(zhàn)斗師‘,’魔法師‘。戰(zhàn)斗師文件夾里有'戰(zhàn)斗師相關(guān).doc', '戰(zhàn)斗師相關(guān)數(shù)據(jù).xlsx'這兩個文件。魔法師文件夾里有'魔法師相關(guān).doc', '魔法師相關(guān)數(shù)據(jù).xls'這兩個文件,直觀如下。注意對于root,需要處理的文件夾\戰(zhàn)斗師,中間是反斜杠\與其他不同,后面會利用這個性質(zhì)。

接下來:

root_files_Global = []
def find_excel():#定義獲取excel文件路徑
    for root, dirs, files in os.walk('{}'.format(filename)):
        for i in range(len(files)):
            if 'xls' in files[i] or 'xlsx' in files[i]:
                root_files_Global.append(root+'/'+files[i])
find_excel()
print(root_files_Global)

對于for i in range(len(files))循環(huán)下,如果files列表內(nèi)第i個元素中有'xls'、'xlsx'字符串在內(nèi)(即判斷excel文件),則在root_files_Global列表內(nèi)添加文件的路徑加名稱。這樣在整個循環(huán)內(nèi),就能把需要處理的文件夾內(nèi)的所有excel文件的路徑加名稱全部添加到root_files_Global列表內(nèi)??梢钥匆幌逻@一部分運行的結(jié)果:

3.對excel文件內(nèi)容的讀取

由于對excel文件的讀取分xls與xlsx格式的讀取,所以需要分別引用xlrd庫與openpyxl庫,不過他們讀取內(nèi)容的過程相似,可以仿照。這一部分的總代碼如下:

row = []
column = []
value = []
f0 = 0
def read_excel_xls():#定義讀取xls文件格式函數(shù)
    global f0
    wb = xlrd.open_workbook(root_files_Global[t])
    sheet_names = wb.sheet_names()
    sheet = wb.sheet_by_name(sheet_names[0])
    for r in range(sheet.nrows):
        for c in range(sheet.ncols):
            va = sheet.cell(r, c).value
            row.append(r+f0)
            column.append(c)
            value.append(va)
    f0 = f0 + sheet.nrows
def read_excel_xlsx():#定義讀取xlsx文件格式的函數(shù),使用openpyxl
    global f0
    wb = openpyxl.load_workbook(root_files_Global[t])
    ws = wb.worksheets[0]
    for r in range(ws.max_row):
        for c in range(ws.max_column):
            va = ws.cell(r+1, c+1).value
            row.append(r + f0)
            column.append(c)
            value.append(va)
    f0 = f0 + ws.max_row

這一部分我們就主要看read_excel_xls()這個定義的函數(shù),read_excel_xlsx()可以仿照。9-11行作用是打開excel表格內(nèi)第一個sheet表格(具體可以查看xlrd庫相關(guān)內(nèi)容)。sheet.nrows表示表格的行數(shù),sheet.ncols表示表格的列數(shù),第24行至25行表示在每一行遍歷每一列;va = ws.cell(r+1, c+1).value的作用為獲取第r+1行、c+1列的內(nèi)容并返還對象va。將內(nèi)容行數(shù)信息和列數(shù)信息分別儲存在row=[]、column=[]這兩個列表里,將內(nèi)容信息儲存在value=[]列表里。這里f0的使用是比較重要的,如果沒有f0,當循環(huán)到下一個文件,行數(shù)與列數(shù)的信息就又重0開始了,而我們之后需要寫入一個總表,行數(shù)信息就應(yīng)該自上個文件的最大行數(shù)再往下。f0的作用就是讓行數(shù)信息接著往下。

為了使按照順序讀取多個excel文件,可以使用如下代碼:

for t in range(len(root_files_Global)):
    if 'xlsx' in root_files_Global[t]:
        read_excel_xlsx()
    elif 'xls' in root_files_Global[t]:
        read_excel_xls()

4.寫入excel總表

這一部分就比較簡單了,總的代碼如下:

def write_excel_xlsx():#定義寫入xlsx文件格式的函數(shù),使用openpyxl
    wb = openpyxl.Workbook()
    ws = wb.worksheets[0]
    for i in range(len(row)):
        ws.cell(row[i]+1,column[i]+1).value = value[i]
    wb.save('總表.xlsx')

openpyxl.Workbook()創(chuàng)建一個xlsx格式excel文件并返還wb對象,打開這個文件的第一個sheet表格,第4行到第5行代碼為按照行的信息和數(shù)的信息寫入內(nèi)容,wb.save('總表.xlsx')最后保存總表。

到這里大致python代碼就完成了。接下來引入GUI、打包exe可執(zhí)行化文件。

5.設(shè)置GUI界面

這一步分總的代碼如下:

def askfile():#選擇文件夾
    global filename
    filename = tk.filedialog.askdirectory()
    if filename !='':
        label2.config(text=filename)
        print(filename)
    else:
        label2.config(text='您沒有選擇任何文件夾')
def GUI_excel():
    global label2
    window = tk.Tk()
    window.geometry('600x300')
    window.title('excel合成')
    label1 = tk.Label(window,text='請選擇需要處理的文件夾,選擇好就已經(jīng)處理完畢,如需重新處理,刪除合成好的表并重新啟動程序')
    label1.place(x=15,y=10)
    label2 = tk.Label(window,text='')
    label2.place(x=15,y=30)
    button1 = tk.Button(window,text='選擇文件夾',bg='blue',fg='white',command=askfile())
    button1.place(x=15,y=60)
    window.mainloop()

window = tk.Tk()

window.geometry('600x300')

window.title('excel合成')

這三行代碼用于創(chuàng)建一個大小為’600*300‘GUI界面,標題名稱為excel合成,label1是一個標簽用為提示相關(guān)信息,label2主要是為了搭配askfile()函數(shù)使用。

再設(shè)置一個按鈕button1,它的功能就是askfile(),而askfile()的作用類似我們下載一個東西需選擇下在哪個地方的界面,就如下:

到現(xiàn)在所有代碼都已經(jīng)完成,我把總的代碼寫在下面,需要自?。?/p>

#只針對sheet1/支持xls、xlsx/最后輸出xlsx格式總表
#可以修改文件價名稱/匯總xls、xlsx表格
import xlrd
import os
import openpyxl
import tkinter as tk
import tkinter.filedialog
root_files_Global = []
row = []
column = []
value = []
f0 = 0
def askfile():#選擇文件夾
    global filename
    filename = tk.filedialog.askdirectory()
    if filename !='':
        label2.config(text=filename)
        print(filename)
    else:
        label2.config(text='您沒有選擇任何文件夾')
def GUI_excel():
    global label2
    window = tk.Tk()
    window.geometry('600x300')
    window.title('excel合成')
    label1 = tk.Label(window,text='請選擇需要處理的文件夾,選擇好就已經(jīng)處理完畢,如需重新處理,刪除合成好的表并重新啟動程序')
    label1.place(x=15,y=10)
    label2 = tk.Label(window,text='')
    label2.place(x=15,y=30)
    button1 = tk.Button(window,text='選擇文件夾',bg='blue',fg='white',command=askfile())
    button1.place(x=15,y=60)
    window.mainloop()
GUI_excel()
def find_excel():#定義獲取excel文件路徑
    for root, dirs, files in os.walk('{}'.format(filename)):
        for i in range(len(files)):
            if 'xls' in files[i] or 'xlsx' in files[i]:
                root_files_Global.append(root+'/'+files[i])
find_excel()
print(root_files_Global)
def read_excel_xls():#定義讀取xls文件格式函數(shù)
    global f0
    wb = xlrd.open_workbook(root_files_Global[t])
    sheet_names = wb.sheet_names()
    sheet = wb.sheet_by_name(sheet_names[0])
    for r in range(sheet.nrows):
        for c in range(sheet.ncols):
            va = sheet.cell(r, c).value
            row.append(r+f0)
            column.append(c)
            value.append(va)
    f0 = f0 + sheet.nrows
def read_excel_xlsx():#定義讀取xlsx文件格式的函數(shù),使用openpyxl
    global f0
    wb = openpyxl.load_workbook(root_files_Global[t])
    ws = wb.worksheets[0]
    for r in range(ws.max_row):
        for c in range(ws.max_column):
            va = ws.cell(r+1, c+1).value
            row.append(r + f0)
            column.append(c)
            value.append(va)
    f0 = f0 + ws.max_row
for t in range(len(root_files_Global)):
    if 'xlsx' in root_files_Global[t]:
        read_excel_xlsx()
    elif 'xls' in root_files_Global[t]:
        read_excel_xls()
def write_excel_xlsx():#定義寫入xlsx文件格式的函數(shù),使用openpyxl
    wb = openpyxl.Workbook()
    ws = wb.worksheets[0]
    for i in range(len(row)):
        ws.cell(row[i]+1,column[i]+1).value = value[i]
    wb.save('總表.xlsx')
write_excel_xlsx()

6.打包成exe可執(zhí)行文件

如果直接使用install進行打包會使壓縮包達到兩、三百兆的樣子。傳輸起來會非常不方便。所以這里需要python創(chuàng)建虛擬環(huán)境,由于我使用的是Anaconda,所以在這里只介紹相關(guān)內(nèi)容,大家可以上網(wǎng)搜如何下載,這里我就不過多介紹了。

先介紹幾個conda命令

conda create -n 虛擬環(huán)境名字 python==3.1 #創(chuàng)建虛擬環(huán)境

conda activate 虛擬環(huán)境名字 #激活虛擬環(huán)境

conda deactivate #退出虛擬環(huán)境

下載好后,從開始菜單運行“Anaconda Prompt”,使用上述第一個命令創(chuàng)建名為‘excel’的虛擬環(huán)境,如下:

在創(chuàng)建過程中需要回復(fù)(y/n),Yes,再激活虛擬環(huán)境

使用conda activate 虛擬環(huán)境名字 #激活虛擬環(huán)境,剛剛我們創(chuàng)建的虛擬環(huán)境名字為excel,結(jié)果如下:

這樣就代表激活好了,現(xiàn)在可以使用conda list來看下這個虛擬環(huán)境所安裝的一些庫:

由于我們腳本還需要使用xlrd、openpyxl這兩個庫,而tkinter庫和os庫是python自帶庫,所以只需要將這兩個庫加載到虛擬環(huán)境中,當然還必不可打包的庫pyinstaller;使用如下安裝庫(直接輸入就好):

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xlrd

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple openpyxl

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller

現(xiàn)在我已經(jīng)安裝好了。現(xiàn)在只需你新建個文件夾,將py文件放進去,在進行如下操作就好了

我的py文件名稱為excel合成,并將它放在了excel合成總表這個文件夾里了,

所以cd C:/Users/86182/Desktop/excel合成總表這邊轉(zhuǎn)到自己的路徑就好了,這樣文件就打包好了,可執(zhí)行化文件在剛剛那個文件夾中的dist里面

到現(xiàn)在就結(jié)束了。

總結(jié):

雖然此方法將多個excel表格內(nèi)的內(nèi)容進行了合并,但是還存在一個問題就是,并不能將excel的格式一起合并起來,不過后面我會在學(xué)習(xí)以下,看能不能解決。

到此這篇關(guān)于如何用pyhton將文件夾內(nèi)多個excel表格合并成總表的文章就介紹到這了,更多相關(guān)pyhton將多個excel表格合并內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論