成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

[[383956]]

一、前言

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


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

二、項(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)打開(kāi),通過(guò)concat()進(jìn)行數(shù)據(jù)追加合并即可。

4)如何保存文件?

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

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

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

  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. # 獲取第一個(gè)EXCEL名 
  2.  xlsx_names1 = xlsx_names[0] 
  3.  
  4.  aa = path + xlsx_names1 
  5.  #打開(kāi)第一個(gè)EXCEL 
  6.  first_file_fh=xlrd.open_workbook(aa) 
  7.  # 獲取SHEET名 
  8.  first_file_sheet=first_file_fh.sheets() 

4、第四步對(duì)Sheet內(nèi)容進(jìn)行循環(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個(gè),第%d個(gè)。" % (len(sheet_names),num)) 
  3.     num += 1 
  4. writer.save() 
  5. 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í)留言提問(wèn),大家一起學(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è)有效,歡迎大家積極嘗試噢!

來(lái)自群友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.  
  10. def merge_xlsx_files(xlsx_files): 
  11.     wb = openpyxl.load_workbook(xlsx_files[0]) 
  12.     ws = wb.active 
  13.     ws.title = "merged result" 
  14.  
  15.     for  filename in xlsx_files[1:]: 
  16.         workbook = openpyxl.load_workbook(filename) 
  17.         sheet = workbook.active 
  18.         for row in sheet.iter_rows(min_row=1): 
  19.             values = [cell.value for cell in row] 
  20.             ws.append(values
  21.     return wb 
  22.  
  23. #path is very important here , must true
  24. def get_all_xlsx_files(path): 
  25.     xlsx_files = glob.glob(os.path.join(r'C:\\Users\\pdcfi\\Desktop\\', '*.xlsx')) 
  26.     sorted(xlsx_files, key=str.lower
  27.     return xlsx_files 
  28.  
  29. def main(): 
  30.     xlsx_files = get_all_xlsx_files(os.path.expanduser('~lmx')) 
  31.     wb = merge_xlsx_files(xlsx_files) 
  32.     wb.save('merged_form.xlsx'
  33.  
  34. if __name__ == '__main__'
  35.     main() 
  36.      
  37. print("all excel append OK!"

來(lái)自好友劉早起的代碼:

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

來(lái)自群友Engineer的代碼:

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

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


 

責(zé)任編輯:姜華 來(lái)源: Python爬蟲(chóng)與數(shù)據(jù)挖掘
相關(guān)推薦

2021-08-09 13:31:25

PythonExcel代碼

2021-02-10 09:34:40

Python文件的壓縮PyCharm

2021-03-23 09:05:52

PythonExcelVlookup

2022-01-27 09:24:20

PythonExcelPython基礎(chǔ)

2009-07-08 17:49:52

MS JVM

2021-12-11 20:20:19

Python算法線性

2023-04-26 12:46:43

DockerSpringKubernetes

2011-01-06 10:39:25

.NET程序打包

2009-11-09 14:57:37

WCF上傳文件

2011-01-10 14:41:26

2025-05-07 00:31:30

2011-05-03 15:59:00

黑盒打印機(jī)

2021-07-14 09:00:00

JavaFX開(kāi)發(fā)應(yīng)用

2024-08-20 15:05:42

機(jī)器學(xué)習(xí)多任務(wù)多標(biāo)簽?zāi)P?/a>

2022-10-19 14:30:59

2022-04-24 10:33:56

大數(shù)據(jù)數(shù)據(jù)分析

2009-07-03 17:15:31

jsp上傳文件

2021-02-02 13:31:35

Pycharm系統(tǒng)技巧Python

2021-05-10 06:48:11

Python騰訊招聘

2020-05-15 08:07:33

JWT登錄單點(diǎn)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久aⅴ乱码一区二区三区 91综合网 | 欧美黄色片在线观看 | 在线免费视频一区 | 国产午夜精品视频 | 久久久久久国产精品 | 视频一区中文字幕 | 欧美一区二区三区视频在线观看 | 九七午夜剧场福利写真 | www.成人.com| 精品视频一区二区 | 久久精品成人热国产成 | 欧美一级二级三级 | 黄色网址在线播放 | 91久久精品国产91久久性色tv | 亚洲一区二区三区免费视频 | 在线免费观看日本 | 精品国产一区二区久久 | aaaa一级毛片 | 色狠狠一区 | 久久99精品久久久久久秒播九色 | 久久久久国产精品午夜一区 | 中文字幕亚洲欧美 | 天堂三级| 精品日韩在线 | 国产精品视屏 | 国产福利91精品一区二区三区 | 国产精品久久久久久久久久三级 | 久草资源在线视频 | 天天艹逼网 | 日韩欧美在线一区二区 | 亚洲一区国产精品 | 老司机午夜性大片 | 久久精品国产久精国产 | 国产精品久久久久久 | www.4虎影院 国产999精品久久久影片官网 | 欧美一级黄色网 | 久久精品一区二区视频 | 久草视频在线播放 | 天天操综合网站 | 插插插干干干 | 99久久夜色精品国产亚洲96 |