<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          手把手教你4種方法用Python批量實(shí)現(xiàn)多Excel多Sheet合并

          共 5261字,需瀏覽 11分鐘

           ·

          2021-02-28 09:16

          點(diǎn)擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進(jìn)行關(guān)注

          回復(fù)“書籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書

          不堪玄鬢影,來對(duì)白頭吟。

          一、前言

          大家好,我是崔艷飛。前兩天給大家分享了Python自動(dòng)化文章:手把手教你利用Python輕松拆分Excel為多個(gè)CSV文件,而后在Python進(jìn)階交流群里邊有讀者遇到一個(gè)問題,他有很多個(gè)Excel表格,他需要對(duì)這些Excel文件進(jìn)行合并。

          誠(chéng)然,一個(gè)一個(gè)打開復(fù)制粘貼固然可行,但是該方法費(fèi)時(shí)費(fèi)力,還容易出錯(cuò),幾個(gè)文件還可以手動(dòng)處理,要是幾十個(gè)甚至上百個(gè),你就抓瞎了,不過這問題對(duì)Python來說,so easy,一起來看看吧!


          二、項(xiàng)目目標(biāo)

          用Python實(shí)現(xiàn)多Excel、多Sheet的合并處理。


          三、項(xiàng)目準(zhǔn)備

          軟件:PyCharm

          需要的庫(kù):pandas, xlrd,os


          四、項(xiàng)目分析

          1)如何選擇要合并的Excel文件?

          利用os,獲取所有要合并的Excel文件。

          2)如何選擇要合并的Sheet?

          利用xlrd庫(kù)進(jìn)行Excel讀取,獲取要合并的Sheet名。

          3)如何合并?

          利用pandas庫(kù),對(duì)所有Sheet名逐一循環(huán)打開,通過concat()進(jìn)行數(shù)據(jù)追加合并即可。

          4)如何保存文件?

          利用to_excel保存數(shù)據(jù),得到最終合并后的目標(biāo)文件。


          五、項(xiàng)目實(shí)現(xiàn)

          1、第一步導(dǎo)入需要的庫(kù)

          import pandas as pdimport xlrdimport os

          2、第二步選擇要合并的Excel文件

           #要合并文件路徑    path="D:/b/"    #獲取文件夾下所有EXCEL名    xlsx_names = [x for x in os.listdir(path) if x.endswith(".xlsx")]

          3、第三步選擇要合并的Sheet

             # 獲取第一個(gè)EXCEL名    xlsx_names1 = xlsx_names[0]
          aa = path + xlsx_names1 #打開第一個(gè)EXCEL first_file_fh=xlrd.open_workbook(aa) # 獲取SHEET名 first_file_sheet=first_file_fh.sheets()

          4、第四步對(duì)Sheet內(nèi)容進(jìn)行循環(huán)合并

             #按SHEET名循環(huán)    for sheet_name in sheet_names:        df = None        # 按EXCEL名循環(huán)        for xlsx_name in xlsx_names:            sheet_na = pd.ExcelFile(path + xlsx_name).sheet_names            if sheet_name in sheet_na:                #print(sheet_name)                _df = pd.read_excel(path + xlsx_name, sheet_name=sheet_name,header=None)                if df is None:                    df = _df                else:                    df = pd.concat([df, _df], ignore_index=True)            else:continue

          5、第五步保存合并后的文件

            
                df.to_excel(excel_writer=writer, sheet_name=sheet_name, encoding="utf-8", index=False)        print(sheet_name + "  保存成功!共%d個(gè),第%d個(gè)。" % (len(sheet_names),num))        num += 1    writer.save()    writer.close()


          六、效果展示

          1、處理前Excel數(shù)據(jù):

          2、運(yùn)行進(jìn)度提示:

          3、合并后的結(jié)果:


          七、總結(jié)

          本文介紹了如何利用Python對(duì)多個(gè)Excel文件、多Sheet進(jìn)行合并處理,減少了很多復(fù)制粘貼的麻煩,省時(shí)省力,還不容易出錯(cuò),代碼不多,循環(huán)追加有點(diǎn)繞,想想也就明白了,不懂的隨時(shí)留言提問,大家一起學(xué)習(xí)進(jìn)步。

          有想法的小伙伴還可以將文章中的代碼進(jìn)行打包,做成一個(gè)exe可執(zhí)行的小軟件,包裝好發(fā)給別人使用,也可以賺點(diǎn)小費(fèi)噢,關(guān)于打包的教程這里不再贅述,歡迎前往:三個(gè)你必須要記住的Pyinstaller打包命令——利用Python實(shí)現(xiàn)打包exe。


          八、彩蛋

          下面兩份代碼是群內(nèi)小伙伴提供了,小編也自行測(cè)試了下,親測(cè)有效,歡迎大家積極嘗試噢!

          來自群友Jayson的代碼:

          # -*- coding: utf-8 -*-# @Author: hebe# @Date:   2020-04-18 18:31:03# @Last Modified by:   hebe# @Last Modified time: 2020-04-18 19:40:48import os import globimport openpyxl
          def merge_xlsx_files(xlsx_files): wb = openpyxl.load_workbook(xlsx_files[0]) ws = wb.active ws.title = "merged result"
          for filename in xlsx_files[1:]: workbook = openpyxl.load_workbook(filename) sheet = workbook.active for row in sheet.iter_rows(min_row=1): values = [cell.value for cell in row] ws.append(values) return wb
          #path is very important here , must true.def get_all_xlsx_files(path): xlsx_files = glob.glob(os.path.join(r'C:\\Users\\pdcfi\\Desktop\\', '*.xlsx')) sorted(xlsx_files, key=str.lower) return xlsx_files
          def main(): xlsx_files = get_all_xlsx_files(os.path.expanduser('~lmx')) wb = merge_xlsx_files(xlsx_files) wb.save('merged_form.xlsx')
          if __name__ == '__main__': main() print("all excel append OK!")

          來自好友劉早起的代碼:

          # -*- coding: utf-8 -*-from openpyxl import load_workbook, Workbookimport glob
          path = "C:\\Users\\pdcfi\\Desktop\\excel\\"new_workbook = Workbook()new_sheet = new_workbook.active
          # 用flag變量明確新表是否已經(jīng)添加了表頭,只要添加過一次就無(wú)須重復(fù)再添加flag = 0
          for file in glob.glob(path + '/*.xlsx'): workbook = load_workbook(file) sheet = workbook.active
          coloum_A = sheet['A'] row_lst = [] for cell in coloum_A: if cell: print(cell.row) row_lst.append(cell.row)
          if not flag: header = sheet[1] header_lst = [] for cell in header: header_lst.append(cell.value) new_sheet.append(header_lst) flag = 1
          for row in row_lst: data_lst = [] for cell in sheet[row]: data_lst.append(cell.value) new_sheet.append(data_lst)
          new_workbook.save(path + '/' + '符合篩選條件的新表.xlsx')

          來自群友Engineer的代碼:

          import tkinter as tkfrom tkinter import filedialogimport osimport pandas as pdimport glob
          root = tk.Tk()root.withdraw()
          # 選擇文件夾位置filelocation = os.path.normpath(filedialog.askdirectory(initialdir=os.getcwd()))lst = []
          # 讀取文件夾下所有文件(xls和xlsx都讀?。?/span>for i in glob.glob(filelocation + "\\\\" + "*.*"): if os.path.splitext(i)[1] in [".xls", ".xlsx"]: lst.append(pd.read_excel(i))
          # 保存合并后的excel文件writer = pd.ExcelWriter(filedialog.asksaveasfilename(title="保存", initialdir=filelocation, defaultextension="xlsx", filetypes=[("Excel 工作簿", "*.xlsx"), ("Excel 97-2003 工作簿", "*.xls")]))pd.concat(lst).to_excel(writer, 'all', index=False)writer.save()
          print('\n%d個(gè)文件已經(jīng)合并成功!' % len(lst))

          最后需要本文項(xiàng)目代碼的小伙伴,請(qǐng)?jiān)诠娞?hào)后臺(tái)回復(fù)“合并文件”關(guān)鍵字進(jìn)行獲取,如果在運(yùn)行過程中有遇到任何問題,請(qǐng)隨時(shí)留言或者加小編好友,小編看到會(huì)幫助大家解決bug噢!

          當(dāng)然了,實(shí)現(xiàn)本文功能不僅僅限于上面提及的3種方式,使用pandas也是可以做到的,如果你還有其他方法,歡迎交個(gè)朋友一起學(xué)習(xí)交流。

          小編最近建立了一個(gè)Python付費(fèi)學(xué)習(xí)交流群,只需要9.99元小紅包即可入群學(xué)習(xí)交流,大家的學(xué)習(xí)氛圍很好,有問必答,里邊“無(wú)絲竹亂耳,亦無(wú)案牘勞形”,純交流學(xué)習(xí)之用,感興趣的小伙伴可以加下方小編微信進(jìn)群學(xué)習(xí)交流噢!

          ------------------- End -------------------

          往期精彩文章推薦:

          歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群

          萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行

          /今日留言主題/

          隨便說一兩句吧~

          瀏覽 65
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  嫩草成人影院 | 色欲在线 | 精品久久中文娱乐网 | 中文字幕一区第一页 | 欧美色大香蕉 |