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

盤點四種使用Python批量合并同一文件夾內所有子文件夾下的Excel文件內所有Sheet數據

開發 后端
本文從實際工作出發,基于Python編程,介紹了4種方法,實現批量合并同一文件夾內所有子文件夾下的Excel文件內所有Sheet數據,為大家減少了很多復制粘貼的麻煩,省時省力,還不容易出錯。

[[435418]]

一、前言

大家好,我是Python進階者。前一陣子給大家分享了Python自動化文章:手把手教你利用Python輕松拆分Excel為多個CSV文件,手把手教你4種方法用Python批量實現多Excel多Sheet合并,而后在Python進階交流群里邊有個叫【扮貓】的粉絲遇到一個問題,她有很多個Excel表格,而且多個excel里多個sheet,現在需要對這些Excel文件進行合并。

用上面鏈接對應的方法進行合并,發現只能夠合并Sheet,其他的就合并不了,這確實是個問題。

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

二、項目目標

用Python實現多Excel、多Sheet的合并處理,針對現實中的切確需求,使用Python批量合并同一文件夾內所有子文件夾下的Excel文件內所有Sheet數據,這個需求在現實生活中還是挺常見的,所有比較實用。

三、項目準備

軟件:PyCharm

需要的庫:pandas,os,glob

四、項目分析

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

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

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

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

3)如何合并?

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

4)如何保存文件?

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

五、項目實現

這里提供4種方法給大家,一個比一個簡潔,其中后面三個方法都是來自【小小明大佬】提供的,確實太強了。

1、方法一

這個方法是來自【王寧】大佬的分享,代碼確實有點多,不過也是手把手教程,非常詳細,也有注釋,詳情可以戳這篇文章:文科生自學Python-批量匯總同一路徑內所有Excel文件內所有Sheet數據-基礎知識1.41,代碼如下:

  1. # -*- coding: utf-8 -*- 
  2. import pandas as pd 
  3. import datetime 
  4. import os 
  5.  
  6.  
  7. # define a starting point of time 
  8. start = datetime.datetime.now() 
  9.  
  10.  
  11. def Set_Work_Path(x): 
  12.     try: 
  13.         os.chdir(x) 
  14.         route = os.getcwd() 
  15.         print(route) 
  16.         return route 
  17.     except Exception: 
  18.         print("No Result"
  19.  
  20.  
  21. work_path = r"E:\\PythonCrawler\\python_crawler-master\\MergeExcelSheet\\file\\" 
  22. Set_Work_Path(work_path) 
  23.  
  24.  
  25. # define a function to get all the xlsx file names after deleting old file if there. 
  26. def Get_Dedicated_4Letter_File_List(x): 
  27.     path = os.getcwd() 
  28.     old_name = path + os.sep + "匯總數據" + ".xlsx"  # dim a txt name 
  29.     if os.path.exists(old_name): 
  30.         os.remove(old_name) 
  31.     files = os.listdir(path)  # print(files) #check all files name in the path 
  32.     current_list = [] 
  33.     for i in range(0, len(files), 1): 
  34.         try: 
  35.             if files[i][-4:] == x and files[i][:4] != "匯總數據"
  36.                 current_list.append(files[i]) 
  37.         except Exception: 
  38.             pass 
  39.     return current_list 
  40.  
  41.  
  42. Current_Excel_list = Get_Dedicated_4Letter_File_List("xlsx"
  43. print(Current_Excel_list) 
  44.  
  45.  
  46. # define a function to read all sheets one by one in excel file 
  47. def Get_All_Sheets_Excel(x): 
  48.     file = pd.ExcelFile(x) 
  49.     list_sht_name = file.sheet_names  # get list of sheets' names 
  50.     print(list_sht_name) 
  51.     list_sht_data = []  # get all sheet data sets into a list 
  52.     for i in range(0, len(list_sht_name), 1): 
  53.         list_sht_data.append(pd.read_excel(x, header=0, sheet_name=list_sht_name[i], index_col=None)) 
  54.     # merge all data sets together 
  55.     df = pd.concat(list_sht_data) 
  56.     # delete blank data 
  57.     df.dropna(axis=0, how="all", inplace=True
  58.     print(df) 
  59.     return df 
  60.  
  61.  
  62. # define a list to get all data from sheets from different excel files 
  63. data_list = [] 
  64. for i in range(0, len(Current_Excel_list), 1): 
  65.     # print(Current_Excel_list[i]) 
  66.     data_list.append(Get_All_Sheets_Excel(Current_Excel_list[i])) 
  67. data = pd.concat(data_list) 
  68. data.dropna(axis=0, how="all", inplace=True
  69. print(data) 
  70.  
  71. # save the data into excel file 
  72. writer = pd.ExcelWriter("王寧大佬的匯總數據.xlsx"
  73. data.to_excel(writer, encoding="utf_8_sig", sheet_name="DATA"index=False
  74. # get the target pivot datasets 
  75. writer.save() 
  76.  
  77. end = datetime.datetime.now() 
  78. run_time = round((end-start).total_seconds()/60, 2) 
  79. show = "程序運行消耗時間為: %s 分鐘" % run_time+",搞定!" 
  80. print(show) 

上面這個代碼對原始數據要求比較苛刻,前提條件:所有數據都是規范的數據源且字段名和數據結構是一樣的。這樣看來,還是有些受限的。不過不要慌,接下來【小小明大佬】的這三個方法,就沒有這個限制,下面一起來看看吧!

2、方法二

下面這個代碼是基于【小小明大佬】提供的單Sheet表合并代碼改進所得到的,關鍵點在于將sheet_name=None這個參數帶上,代表獲取Excel文件中的所有sheet表,其返回的是一個字典,所有在后面遍歷的時候,是以字典的形式進行取值的,之后在15行的地方,需要注意使用的是extend()方法進行追加,如果使用append()方法,得到的就只有最后一個表格的合并結果,這個坑小編親自踩過,感興趣的小伙伴也可以踩下坑。

  1. # -*- coding: utf-8 -*- 
  2. import os 
  3. import pandas as pd 
  4. result = [] 
  5. path = r"E:\\PythonCrawler\\python_crawler-master\\MergeExcelSheet\\testfile\\file" 
  6. for root, dirs, files in os.walk(path, topdown=False): 
  7.     for name in files: 
  8.         if name.endswith(".xls"or name.endswith(".xlsx"): 
  9.             df = pd.read_excel(os.path.join(root, name), sheet_name=None) 
  10.             result.append(df) 
  11.  
  12. data_list = [] 
  13. for data in result: 
  14.     # print(data.values()) 
  15.     data_list.extend(data.values())  # 注意這里是extend()函數而不是append()函數 
  16.  
  17. df = pd.concat(data_list) 
  18. df.to_excel("testfile所有表合并.xlsx"index=False
  19. print("合并完成!"

3、方法三

下面這個代碼是【小小明大佬】手擼的一個代碼,使用了列表append()方法,效率雖說會低一些,但是處理上百上千個文件,仍然不在話下。

需要注意的是代碼中的第6行和第7行,獲取文件路徑,其中**代表的是文件夾下的子文件遞歸。另外就是.xls*了,這個是正則寫法,表示的是既可以處理xls格式,也可以處理xlsx格式的Excel文件,真是妙哉!

  1. # -*- coding: utf-8 -*- 
  2. import glob 
  3. import pandas as pd 
  4. path = "E:\\PythonCrawler\\python_crawler-master\\MergeExcelSheet\\file\\" 
  5. data = [] 
  6. for excel_file in glob.glob(f'{path}/**/[!~]*.xls*'): 
  7. for excel_file in glob.glob(f'{path}/[!~]*.xlsx'): 
  8.     excel = pd.ExcelFile(excel_file) 
  9.     for sheet_name in excel.sheet_names: 
  10.         df = excel.parse(sheet_name) 
  11.         data.append(df) 
  12. # print(data) 
  13.  
  14. df = pd.concat(data, ignore_index=True
  15. df.to_excel("小小明提供的代碼(合并多表)--glob和pandas庫列表append方法--所有表合并.xlsx"index=False
  16. print("合并完成!"

4、方法四

下面這個代碼是【小小明大佬】手擼的另外一個代碼,使用了sheet_name=None和列表extend()方法,將sheet_name=None這個參數帶上,代表獲取Excel文件中的所有sheet表,其返回的是一個字典,所有在后面遍歷的時候,是以字典的形式進行取值的,效率比前面的方法都要高一些。

需要注意的是代碼中的第6行和第7行,獲取文件路徑,其中**代表的是文件夾下的子文件遞歸。另外就是.xls*了,這個是正則寫法,表示的是既可以處理xls格式,也可以處理xlsx格式的Excel文件,真是妙哉!

  1. # -*- coding: utf-8 -*- 
  2. import glob 
  3. import pandas as pd 
  4. path = r"E:\PythonCrawler\python_crawler-master\MergeExcelSheet\file" 
  5. data = [] 
  6. for excel_file in glob.glob(f'{path}/**/[!~]*.xlsx'): 
  7. for excel_file in glob.glob(f'{path}/[!~]*.xlsx'): 
  8.     dfs = pd.read_excel(excel_file, sheet_name=None).values() 
  9.     data.extend(dfs) 
  10. # print(data) 
  11.  
  12. df = pd.concat(data, ignore_index=True
  13. df.to_excel("小小明提供的代碼(合并多表)--glob和pandas庫列表extend方法--簡潔--所有表合并.xlsx"index=False
  14. print("合并完成!"

六、效果展示

1、處理前Excel數據:

2、運行進度提示:

3、合并后的結果:

七、總結

本文從實際工作出發,基于Python編程,介紹了4種方法,實現批量合并同一文件夾內所有子文件夾下的Excel文件內所有Sheet數據,為大家減少了很多復制粘貼的麻煩,省時省力,還不容易出錯。代碼不多,循環追加有點繞,想想也就明白了,大家一起學習進步。

責任編輯:姜華 來源: Python爬蟲與數據挖掘
相關推薦

2021-11-19 08:59:28

Python 批量合并

2023-03-28 15:19:37

文件列表scandir函數

2022-01-27 09:24:20

PythonExcelPython基礎

2015-08-07 10:02:34

Java線程池遞歸

2016-12-07 09:30:00

Power QueryExcel文件

2020-09-23 08:53:48

父文件夾模塊Python

2018-12-19 14:43:13

Linux命令搜索文件

2010-03-25 10:24:32

Python代碼

2024-06-19 10:43:44

2021-02-18 22:07:08

Python項目文件

2011-08-09 18:20:52

windows7文件夾

2020-05-09 16:25:31

Ubuntu文件夾桌面

2024-12-06 15:11:34

Python文件夾目錄

2021-12-03 09:01:36

PythonJson文件Python基礎

2016-10-13 08:55:20

Windows 10PowerShelll批量

2024-11-05 14:00:56

2009-12-03 10:18:32

Linux文件夾執行權限

2010-12-31 13:35:25

文件夾重定向

2011-08-04 15:36:32

文件夾病毒

2009-08-12 17:12:51

C#讀取文件夾
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜视频在线免费观看 | 亚洲美女av网站 | 欧美视频在线观看 | 国产精品永久久久久 | 国产精品国产精品国产专区不蜜 | 一级国产精品一级国产精品片 | 伊人性伊人情综合网 | 黄在线免费观看 | 免费高清成人 | 欧美不卡一区二区三区 | 国产精品一区二区久久精品爱微奶 | 99精品久久久久久久 | 天天操人人干 | 久久久久久久久99 | 久久精品视频一区二区三区 | 日韩在线一区二区三区 | 蜜月aⅴ国产精品 | 欧美久久一区二区 | 亚洲国产成人精品女人久久久 | 成人在线视频网址 | 国产精品乱码一二三区的特点 | 超级黄色一级片 | 成人中文字幕在线观看 | 亚洲免费成人av | 亚洲成人国产 | 国产精品视频在线观看 | 欧美多人在线 | 欧美精品一区二区三区四区 | 亚洲免费视频在线观看 | 一区二区三区四区在线 | 91在线免费视频 | 天天拍天天操 | 欧美激情精品久久久久久变态 | 国产午夜精品久久久久 | 成人激情视频网 | 国产高清精品一区二区三区 | 福利二区 | 国产乱精品一区二区三区 | 国产欧美一级二级三级在线视频 | 日韩高清中文字幕 | 亚洲欧美视频一区 |