背景:供應商程式導出的文件是xls格式的,我需要使用Power Query將這些文件合併整理,但是目前沒有找到可以打卡xls文件的代碼,所以將xls文件轉化為xlsx文件後再使用Power Query進行處理。 思路: 1. 網上找到了將xls文件轉化為xlsx文件的代碼,將這個代碼定義為一個函數去 ...
背景:供應商程式導出的文件是xls格式的,我需要使用Power Query將這些文件合併整理,但是目前沒有找到可以打卡xls文件的代碼,所以將xls文件轉化為xlsx文件後再使用Power Query進行處理。
思路:
1. 網上找到了將xls文件轉化為xlsx文件的代碼,將這個代碼定義為一個函數去執行轉換的功能;
2. 在使用中,將目標文件夾的地址輸入到cmd中,然後程式自動歷遍每一個xls文件並將其轉換為xlsx文件;
代碼:
1. 執行轉換的代碼,python的excel轉換xls為xlsx幾種方法 - CSDN文庫
2. 導入需要使用的module以及定義全局變數:全局變數有 a.輸入的文件夾地址字元串,b.xls文件名列表,
import os import pandas as pd # 設定全局變數 folder_path = ''#xls文件夾路徑 xlsfilename_list = ''#xls文件列表,從xls文件夾路徑中導出
3. 定義函數:將網上找到的執行代碼定義為一個函數,此處輸入輸出的變數名要用自己之前定義的變數名,並且在函數內還需要定義一些局部變數。函數的輸入是一個字元串,字元串的內容是xls文件的絕對地址。
#定義轉換函數 def xls_to_xlsx(xlsfilename): temp = pd.read_excel(xlsfilename)#使用pd.read_excel來讀取xls文件,輸入為文件名稱字元串 xlsxfilename = xlsfilename.replace('.xls','.xlsx')#使用原文件名來命名新的xlsx文件,但是需要將尾碼.xls改為.xlsx temp.to_excel(xlsxfilename,index = False)#將文件轉化為xlsx文件 return
4. 獲取需要做變換的文件夾路徑,並且將文件夾中的所有文件名全部獲取
#交互輸入地址並讀取該地址下的文件名 print('請輸入包含xls文件的地址並以回車結束') folder_path = str(input())#輸入的文件夾路徑 os.chdir(folder_path)#將程式路徑改為輸入的文件夾路徑 xlsfilename_list = os.listdir()#得到文件夾中所有文件的名稱列表
5. 使用for迴圈來歷遍文件夾中的所有文件
#迴圈打開每一個xls文件並轉換為xlsx文件 NumofCycle = len(xlsfilename_list)#獲得路徑中xls文件的數量,並且使用這個數量作為for迴圈的參數 for i in range(1,NumofCycle+1): print('正在轉換第' + str(i) + '個文件')#提示目前正在轉換的進度 xls_to_xlsx(xlsfilename_list[i-1])#執行轉換程式 print('轉換完畢,退出請按任意鍵')#提示轉換完畢
最終得到的整個程式如下:
# -*- coding: utf-8 -*- """ Created on Thu Dec 14 23:19:09 2023 @author: Ray """ import os import pandas as pd # 設定全局變數 folder_path = ''#xls文件夾路徑 xlsfilename_list = ''#xls文件列表,從xls文件夾路徑中導出 #定義轉換函數 def xls_to_xlsx(xlsfilename): temp = pd.read_excel(xlsfilename)#使用pd.read_excel來讀取xls文件,輸入為文件名稱字元串 xlsxfilename = xlsfilename.replace('.xls','.xlsx')#使用原文件名來命名新的xlsx文件,但是需要將尾碼.xls改為.xlsx temp.to_excel(xlsxfilename,index = False)#將文件轉化為xlsx文件 return #交互輸入地址並讀取該地址下的文件名 print('請輸入包含xls文件的地址並以回車結束') folder_path = str(input())#輸入的文件夾路徑 os.chdir(folder_path)#將程式路徑改為輸入的文件夾路徑 xlsfilename_list = os.listdir()#得到文件夾中所有文件的名稱列表 #迴圈打開每一個xls文件並轉換為xlsx文件 NumofCycle = len(xlsfilename_list)#獲得路徑中xls文件的數量,並且使用這個數量作為for迴圈的參數 for i in range(1,NumofCycle+1): print('正在轉換第' + str(i) + '個文件')#提示目前正在轉換的進度 xls_to_xlsx(xlsfilename_list[i-1])#執行轉換程式 print('轉換完畢,退出請按任意鍵')#提示轉換完畢 os.system('pause')
問題以及解決辦法:目前的程式不智能,還有以下幾個問題需要處理:
1. 無法識別文件夾中除了xls文件以外的其他文件,當路徑中有xlsx文件以外,會將xlsx文件轉化為xlsxx文件,很明顯這會報錯。目前需要人工確保文件夾中的所有文件為xls文件才能正確工作;解決這個問題的方法就是在執行迴圈中加一個判定的語句,判斷文件名稱中是否含有'.xls'字元串,如果包含則執行轉換程式,不包含則continue
轉換成exe文件:這個步驟是為了以後使用小程式方便,網路上有很多轉換的案例,這裡需要提示的就是:因為這個程式需要有人工輸入交互,所以在轉換時要把控制台打開,至少我在轉換exe文件的時候如果沒有加控制台-c的命令,最終exe文件是閃退的,代碼沒有問題,但是exe文件閃退。我加了-c的命令後就正常了。
------------祝願大家都能用python提高自己的工作效率