日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
手把手教你4種方法用Python批量實現(xiàn)多Excel多Sheet合并

一、前言

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

誠然,一個一個打開復制粘貼固然可行,但是該方法費時費力,還容易出錯,幾個文件還可以手動處理,要是幾十個甚至上百個,你就抓瞎了,不過這問題對Python來說,so easy,一起來看看吧!

二、項目目標

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

三、項目準備

軟件:PyCharm

需要的庫:pandas, xlrd,os

四、項目分析

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

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

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

利用xlrd庫進行Excel讀取,獲取要合并的Sheet名。

3)如何合并?

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

4)如何保存文件?

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

五、項目實現(xiàn)

1、第一步導入需要的庫

 
 
 
 
  1. import pandas as pd
  2. import xlrd
  3. import os

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

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

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

 
 
 
 
  1. # 獲取第一個EXCEL名
  2.  xlsx_names1 = xlsx_names[0]
  3.  aa = path + xlsx_names1
  4.  #打開第一個EXCEL
  5.  first_file_fh=xlrd.open_workbook(aa)
  6.  # 獲取SHEET名
  7.  first_file_sheet=first_file_fh.sheets()

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

 
 
 
 
  1. #按SHEET名循環(huán)
  2.  for sheet_name in sheet_names:
  3.      df = None
  4.      # 按EXCEL名循環(huán)
  5.      for xlsx_name in xlsx_names:
  6.          sheet_na = pd.ExcelFile(path + xlsx_name).sheet_names
  7.          if sheet_name in sheet_na:
  8.              #print(sheet_name)
  9.              _df = pd.read_excel(path + xlsx_name, sheet_name=sheet_name,header=None)
  10.              if df is None:
  11.                  df = _df
  12.              else:
  13.                  df = pd.concat([df, _df], ignore_index=True)
  14.          else:continue

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

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

六、效果展示

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

2、運行進度提示:

3、合并后的結果:

七、總結

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

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

八、彩蛋

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

來自群友Jayson的代碼:

 
 
 
 
  1. # -*- coding: utf-8 -*-
  2. # @Author: hebe
  3. # @Date:   2020-04-18 18:31:03
  4. # @Last Modified by:   hebe
  5. # @Last Modified time: 2020-04-18 19:40:48
  6. import os 
  7. import glob
  8. import openpyxl
  9. def merge_xlsx_files(xlsx_files):
  10.     wb = openpyxl.load_workbook(xlsx_files[0])
  11.     ws = wb.active
  12.     ws.title = "merged result"
  13.     for  filename in xlsx_files[1:]:
  14.         workbook = openpyxl.load_workbook(filename)
  15.         sheet = workbook.active
  16.         for row in sheet.iter_rows(min_row=1):
  17.             values = [cell.value for cell in row]
  18.             ws.append(values)
  19.     return wb
  20. #path is very important here , must true.
  21. def get_all_xlsx_files(path):
  22.     xlsx_files = glob.glob(os.path.join(r'C:\\Users\\pdcfi\\Desktop\\', '*.xlsx'))
  23.     sorted(xlsx_files, key=str.lower)
  24.     return xlsx_files
  25. def main():
  26.     xlsx_files = get_all_xlsx_files(os.path.expanduser('~lmx'))
  27.     wb = merge_xlsx_files(xlsx_files)
  28.     wb.save('merged_form.xlsx')
  29. if __name__ == '__main__':
  30.     main()
  31.     
  32. print("all excel append OK!")

來自好友劉早起的代碼:

 
 
 
 
  1. # -*- coding: utf-8 -*-
  2. from openpyxl import load_workbook, Workbook
  3. import glob
  4. path = "C:\\Users\\pdcfi\\Desktop\\excel\\"
  5. new_workbook = Workbook()
  6. new_sheet = new_workbook.active
  7. # 用flag變量明確新表是否已經添加了表頭,只要添加過一次就無須重復再添加
  8. flag = 0
  9. for file in glob.glob(path + '/*.xlsx'):
  10.     workbook = load_workbook(file)
  11.     sheet = workbook.active
  12.     coloum_A = sheet['A']
  13.     row_lst = []
  14.     for cell in coloum_A:
  15.         if cell:
  16.             print(cell.row)
  17.             row_lst.append(cell.row)
  18.     if not flag:
  19.         header = sheet[1]
  20.         header_lst = []
  21.         for cell in header:
  22.             header_lst.append(cell.value)
  23.         new_sheet.append(header_lst)
  24.         flag = 1
  25.     for row in row_lst:
  26.         data_lst = []
  27.         for cell in sheet[row]:
  28.             data_lst.append(cell.value)
  29.         new_sheet.append(data_lst)
  30. new_workbook.save(path + '/' + '符合篩選條件的新表.xlsx')

來自群友Engineer的代碼:

 
 
 
 
  1. import tkinter as tk
  2. from tkinter import filedialog
  3. import os
  4. import pandas as pd
  5. import glob
  6. root = tk.Tk()
  7. root.withdraw()
  8. # 選擇文件夾位置
  9. filelocation = os.path.normpath(filedialog.askdirectory(initialdir=os.getcwd()))
  10. lst = []
  11. # 讀取文件夾下所有文件(xls和xlsx都讀?。?/li>
  12. for i in glob.glob(filelocation + "\\\\" + "*.*"):
  13.     if os.path.splitext(i)[1] in [".xls", ".xlsx"]:
  14.         lst.append(pd.read_excel(i))
  15. # 保存合并后的excel文件
  16. writer = pd.ExcelWriter(filedialog.asksaveasfilename(title="保存", initialdir=filelocation, defaultextension="xlsx",
  17.                                                      filetypes=[("Excel 工作簿", "*.xlsx"),
  18.                                                                 ("Excel 97-2003 工作簿", "*.xls")]))
  19. pd.concat(lst).to_excel(writer, 'all', index=False)
  20. writer.save()
  21. print('\n%d個文件已經合并成功!' % len(lst))

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


當前題目:手把手教你4種方法用Python批量實現(xiàn)多Excel多Sheet合并
鏈接地址:http://m.5511xx.com/article/dhdijjp.html