【python】上班自己琢磨的小工具(加班混时长蹭饭票制作的)
文件分类压缩小工具制作的原因
主管休假,多下来的任务不是很多,两个主管休假的话,平时的工作内容就增加好多了,尤其是将两个文件夹的东西倒腾来倒腾去的,手动修改超级费时费力还不能摸鱼,于是我就想到用代码帮我解决这个问题。
小工具的需求
这个很费时费力的工作内容是:将开发在群里发的测试固件压缩文件下载下来,解压缩后,将相应的型号设备的烧录文件和卡刷固件放一起,并且重命名文件夹(将难懂的型号文件夹名字写成客户看得懂的亚子),最后挨个压缩,并上传到公司的网站平台上。
思路1
-
遍历压缩文件的路径;由于开发在工作群里发的压缩文件每次版本号都不一样,为了小工具能长久使用,将解压缩文件的第一个路径命名为B,B里的文件夹命名为A;A里面的两个文件夹名字分别为卡刷文件和烧录固件,卡刷文件 文件夹里是有型号命名的文件夹,再里面就是真正的卡刷文件;烧录固件 文件夹里是有型号命名的烧录固件;
-
将文件夹名称的前五个字符与“烧录文件”文件夹中的文件名称的前五个字符进行比较。如果它们匹配,文件将被复制到新键文件夹C中;
-
在文件夹C中新建由卡刷固件里的文件夹名字的五个字符后的字符重新命名;
但是:第2项中,由python程序新建的文件夹C,好像没有被修改的权限,无论程序被运行多少次,都会报错没有权限,所有才有了下面内容。
思路2
1.现在将思路1里面的第2项修改成这样:将烧录文件夹里的文件名前五个字符和卡刷文件夹里的文件夹名前五个字符进行比较,相同的,就负责烧录文件夹里的文件到卡刷文件夹里的同名文件夹里;
# 遍历卡刷固件文件夹里的文件夹
for folder_name in os.listdir(firmware_path):
folder_path = os.path.join(firmware_path, folder_name)
# 遍历烧录文件夹里的文件
for file_name in os.listdir(burn_files_path):
file_path = os.path.join(burn_files_path, file_name)
# 比较文件夹名字的前五个字符和文件名字的前五个字符
if folder_name[:5] == file_name[:5]:
# 复制文件到卡刷固件文件夹里的对应文件夹
shutil.copy(file_path, folder_path)
2.将卡刷文件夹里的文件夹根据名字规律改名,这样就能顺利运行了;只截一小段代码展示
# 遍历文件夹中的所有文件夹
for folder_name in os.listdir(folder_path):
if "TU2KB(SOC_T31L+8188FTV)_GU2K(SOC_T31L)" in folder_name:
new_name = folder_name.replace("TU2KB(SOC_T31L+8188FTV)_GU2K(SOC_T31L)", "T31L+T31L三目变焦枪球")
elif "TU2MB(SOC_T31LC+8188FTV)_GU2M(SOC_T31LC)" in folder_name:
new_name = folder_name.replace("TU2MB(SOC_T31LC+8188FTV)_GU2M(SOC_T31LC)", "T31LC+T31LC三目变焦枪球")
else:
new_name = folder_name
# 重命名文件夹
shutil.move(os.path.join(folder_path, folder_name), os.path.join(folder_path, new_name))
追加功能
因为网页上要上传的文件格式是rar的压缩文件,所以这边将以上修改了名字的文件夹压缩成rar的压缩文件;代码如下:
for folder_name in os.listdir(firmware_path):
folder_path = os.path.join(firmware_path, folder_name)
zip_path = os.path.join(firmware_path, folder_name + ".rar")
with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as rar_file:
for root, dirs, files in os.walk(folder_path):
for file in files:
file_path = os.path.join(root, file)
rar_file.write(file_path, os.path.relpath(file_path, folder_path))
print("完成压缩")
将文件压缩成点两下的exe文件
这个可以参考csdn内的教程,我也是参考的;
这里给个链接
http://t.csdn.cn/USSLO
不过这边 也可以仔细讲一下,以后忘记了还能看一眼想起来,
首先你的电脑要有下载Pyinstaller模块,我已经下了就不讲了,怎么下看上面那个链接
我的程序名字是 Gunball_sort.py
这里需要新开一个名叫 setup.py 的文件,代码如下
# -*- coding: utf-8 -*-
"""
Created on Thu Jun 15 09:21:40 2023
@author: admin
"""
from distutils.core import setup
import py2exe
setup(console=['your_program.py'])
然后要做的事情是,在桌面建立一个有名字的文件夹,这里预设这个文件夹名字叫File_Packaging
然后WIN+R
cmd
进入cmd黑框后要找到这个文件夹File_Packaging的路径,下面截图:
然后输入压缩命令
Pyinstaller -F -w Gunball_sort.py
按一下回车,然后就会duangduang刷一堆,你就看末尾那个successful就行,代表成功了,这里用一下别人的图
然后你的File_Packaging文件夹里是这样的
你的exe文件在哪里呢?
双击exe文件,你的程序就运行啦~~
如果给你的同事使用,记得写一份使用手册,毕竟这个程序指定了路径才能使用
完整代码
# -*- coding: utf-8 -*-
"""
Created on Wed Jun 14 20:03:53 2023
@author: admin
"""
import os
import shutil
import zipfile
# 指定桌面文件夹B的路径
desktop_path = os.path.join(os.path.expanduser("~"), "Desktop", "B")
# 获取卡刷固件文件夹路径和烧录文件文件夹路径
firmware_path = os.path.join(desktop_path, "A", "卡刷固件")
burn_files_path = os.path.join(desktop_path, "A", "烧录文件")
# 遍历卡刷固件文件夹里的文件夹
for folder_name in os.listdir(firmware_path):
folder_path = os.path.join(firmware_path, folder_name)
# 遍历烧录文件夹里的文件
for file_name in os.listdir(burn_files_path):
file_path = os.path.join(burn_files_path, file_name)
# 比较文件夹名字的前五个字符和文件名字的前五个字符
if folder_name[:5] == file_name[:5]:
# 复制文件到卡刷固件文件夹里的对应文件夹
shutil.copy(file_path, folder_path)
print("yes")
# 指定要遍历的文件夹路径
folder_path = 'C:\\Users\\admin\\Desktop\\B\\A\\卡刷固件'
# 遍历文件夹中的所有文件夹
for folder_name in os.listdir(folder_path):
if "TU2KB(SOC_T31L+8188FTV)_GU2K(SOC_T31L)" in folder_name:
new_name = folder_name.replace("TU2KB(SOC_T31L+8188FTV)_GU2K(SOC_T31L)", "T31L+T31L三目变焦枪球")
elif "TU2MB(SOC_T31LC+8188FTV)_GU2M(SOC_T31LC)" in folder_name:
new_name = folder_name.replace("TU2MB(SOC_T31LC+8188FTV)_GU2M(SOC_T31LC)", "T31LC+T31LC三目变焦枪球")
elif "TU2KB(SOC_T31L+8188FTV)" in folder_name:
new_name = folder_name.replace("TU2KB(SOC_T31L+8188FTV)", "T31L+8188三目变焦球机")
elif "TU2MB(SOC_T31LC+8188FTV)" in folder_name:
new_name = folder_name.replace("TU2MB(SOC_T31LC+8188FTV)", "T31LC+8188三目变焦球机")
elif "BU2KA(SOC_T31L+HI3881)_GU2K(SOC_T31L)" in folder_name:
new_name = folder_name.replace("BU2KA(SOC_T31L+HI3881)_GU2K(SOC_T31L)", "T31L+T31L的wifi枪球")
elif "BU2KD(SOC_T31L+4G)_GU2K(SOC_T31L)" in folder_name:
new_name = folder_name.replace("BU2KD(SOC_T31L+4G)_GU2K(SOC_T31L)", "T31L+T31L的4G枪球")
elif "BU2MA(SOC_T31LC+HI3881)_GU2M(SOC_T31LC)" in folder_name:
new_name = folder_name.replace("BU2MA(SOC_T31LC+HI3881)_GU2M(SOC_T31LC)", "T31LC+T31LC的wifi枪球")
elif "BU2MD(SOC_T31LC+4G)_GU2M(SOC_T31LC)" in folder_name:
new_name = folder_name.replace("BU2MD(SOC_T31LC+4G)_GU2M(SOC_T31LC)", "T31LC+T31LC的4G枪球")
elif "BU2KE(SOC_T31L+8731BU)_GU2K(SOC_T31L)" in folder_name:
new_name = folder_name.replace("BU2KE(SOC_T31L+8731BU)_GU2K(SOC_T31L)", "T31L+T31L的8731BU枪球")
elif "BU2ME(SOC_T31LC+8731BU)_GU2M(SOC_T31LC)" in folder_name:
new_name = folder_name.replace("BU2ME(SOC_T31LC+8731BU)_GU2M(SOC_T31LC)", "T31LC+T31LC的8731BU枪球")
elif "BU2KA(SOC_T31L+HI3881)" in folder_name:
new_name = folder_name.replace("BU2KA(SOC_T31L+HI3881)", "T31L+3881球机")
elif "BU2MA(SOC_T31LC+HI3881)" in folder_name:
new_name = folder_name.replace("BU2MA(SOC_T31LC+HI3881)", "T31LC+3881球机")
elif "BU2KB(SOC_T31L+8188FTV)" in folder_name:
new_name = folder_name.replace("BU2KB(SOC_T31L+8188FTV)", "T31L+8188球机")
elif "BU2MB(SOC_T31LC+8188FTV)" in folder_name:
new_name = folder_name.replace("BU2MB(SOC_T31LC+8188FTV)", "T31LC+8188球机")
elif "BU2KD(SOC_T31L+4G)" in folder_name:
new_name = folder_name.replace("BU2KD(SOC_T31L+4G)", "T31L+4G球机")
elif "BU2MD(SOC_T31LC+4G)" in folder_name:
new_name = folder_name.replace("BU2MD(SOC_T31LC+4G)", "T31LC+4G球机")
elif "BU2KE(SOC_T31L+8731BU)" in folder_name:
new_name = folder_name.replace("BU2KE(SOC_T31L+8731BU)", "T31L+8731BU球机")
elif "BU2ME(SOC_T31LC+8731BU)" in folder_name:
new_name = folder_name.replace("BU2ME(SOC_T31LC+8731BU)", "T31LC+8731BU球机")
else:
new_name = folder_name
# 重命名文件夹
shutil.move(os.path.join(folder_path, folder_name), os.path.join(folder_path, new_name))
print("gagaga")
# 压缩文件夹为rar包
for folder_name in os.listdir(firmware_path):
folder_path = os.path.join(firmware_path, folder_name)
zip_path = os.path.join(firmware_path, folder_name + ".rar")
with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as rar_file:
for root, dirs, files in os.walk(folder_path):
for file in files:
file_path = os.path.join(root, file)
rar_file.write(file_path, os.path.relpath(file_path, folder_path))
print("完成压缩")