[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提高自己的工作效率
来源:https://www.cnblogs.com/purpleskying/p/17902519.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|
|
|
发表于 2023-12-15 10:32:21
举报
回复
分享
|
|
|
|