刚开始学,本想写一段,遍历某一个盘,整理文件名和路径,保存到一个xlsx文件上。
写出的程序能运行,也能实现,但打包后,遇到了几个问题。
先贴上问题解决以前的码
dir = "e:\\" # 遍历E盘
m=[]
n=[]
for root, dirs, files in os.walk(dir):
for file in files:
h=os.path.join(root)
m.append(h)
l=os.path.join(file)
n.append(l)
bg = op.load_workbook(r"d:\\test.xlsx") # D盘里预先新建了一个test.xlsx用来存信息
sheet = bg["Sheet1"]
for i in range(len(m)+1):
sheet.cell(i+1 , 1, m[i - 1])
for j in range(len(n)+1): # sheet.cell(1,1,num_list[0])表示将num_list列表的第0个数据1写入到excel表格的第一行第一列
sheet.cell(j+1 , 2, n[j - 1])
bg.save("d:\\test.xlsx")
坑一:用pyinstaller打包后,报缺少openpyxl模块。这个问题,在查资料后,尝试用“指定路径”方法解决,结果是,不报少模块了。(我天真地以为真的就不少了- -+)
坑二:这个坑是因为第一个坑引起的,不报少模块后,我以为是代码出现问题,反复修改代码,但打包前,总是很顺利,一打包后,双击exe文件,就是没结果,也不报错。后来经过查资料,确认应该还是打包后运行出现了问题,WIN+R-cmd-将exe文件拖入,这样会显示打包后程序具体错在哪里(这一点对当时的我至关重要)。~~~这一番操作后,我发现问题还是出在少openpyxl模块。
坑三: 带有openpyxl库时,直接打包,总会失败,原因是支持Pyinstaller的版本,可能和你用来打包的版本是不同的,所以要尝试更新openpyxl版本。(注意下,Openpyxl版本适用的不一定是下面这篇博文里提及的,请灵活调整)
参考的这位作者:pyinstaller打包程序包含openpyxl库问题解决_weixin_30907523的博客-CSDN博客
坑四:更新Openpyxl模块后,我的天,竟然爆出了这个东西AttributeError: 'int' object has no attribute 'upper'。查资料发现,原来是不同版本的Openpyxl,写程序的方式也不一样。
参考的这位作者:AttributeError: 'int' object has no attribute 'upper'_weixin_30907523的博客-CSDN博客
再贴上修改后的代码,这一版,打包后可以在自己的电脑上正常使用。(可惜,单位电脑还是32位的,兼容的坑接着填)
import openpyxl
import os
dir = "e:\\"
m=[]
n=[]
for root, dirs, files in os.walk(dir):
for file in files:
h=os.path.join(root)
m.append(h)
l=os.path.join(file)
n.append(l)
bg = openpyxl.load_workbook(r"d:\\test.xlsx") # 应先将excel文件放入到工作目录下
sheet = bg['Sheet1']
for i in range(len(m)+1): # “Sheet1”表示将数据写入到excel文件的sheet1下
sheet.cell(i+1 , 1).value= m[i - 1]
for j in range(len(n)+1): # sheet.cell(1,1,num_list[0])表示将num_list列表的第0个数据1写入到excel表格的第一行第一列
sheet.cell(j+1 , 2).value= n[j - 1]
bg.save("d:\\test.xlsx") 这个实现的是遍历E盘,将所有的文件名和地址都存到D盘的test.xlsx中。
打包的话,没搞图标那些,直接就是在Py文件所在地址,cmd窗口输入pyinstaller py文件。
PS:过程中升级PIP遇到了点小问题,参考下面这篇解决了,对这些作者表示感谢!