[Python学习笔记]制作自动将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提高自己的工作效率