前言
什么是效率?简单就是效率!但是想要自己做的小程序足够美观可不是一件简单的事。一开始想做个小程序思路就是有个普通的button,一键使用就好了。但是写下来还是发现没用前端和结构话的编程后期维护很麻烦,所以以后的程序格式都应该尽量符合业界规范。世界上那么多种解决问题的方法,为什么大家都认可那么一两钟?肯定是有他的道理的。好了废话不多说,现在开始设计我们的小程序。
一、小程序构建思路
1.需求
首先我们先确定需求:
我们需要一个可以选择目录,自动处理该目录下面的文件。我们知道文件它是有类型的,而我们可以通过文件的后缀名称来分类。其中有txt、json、pdf、word等。
第二个需求能够选中解压文件并且判断该文件是否为压缩文件,是压缩文件则进行解压。
以上就是我们写这个小程序的目的。
2.技术
首先我们肯定Python进行编程,需要用到其他的库。其中我们需要一个界面可以进行交互。该界面可以选择我们的功能模式。还有一个选择目录的功能,能够将目录路径读取并且显示。那么我们先从界面来考虑,既然是小程序那就设计成窗口的样子。
第一个技术依赖:Python tkinter
该库Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。
直接安装该库即可:
pip install tkinter
第二个技术依赖:os库、shutil
shutil是 篇python 中的高级文件操作模块,与os模块形成互补的关系,os主要提供了文件或文件夹的新建、删除、查看等方法,还提供了对文件以及目录的路径操作。shutil模块提供了移动、复制、 压缩、解压等操作,恰好与os互补,共同一起使用,基本能完成所有文件的操作。是一个非常重要的模块。
这些库都是python自带标准库里面自带的,直接引入就行。
第三个技术依赖: zipfile
zipfile是python里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高的。也是自带的库,调用就好。
二、编程实现
1.引入库
from tkinter import * import os from tkinter.filedialog import askdirectory from tkinter.filedialog import askopenfilename from tkinter import messagebox import shutil import zipfile
2.窗口调整
首先创建出一个界面,我们需要定义该界面窗口的长和宽,以及窗口名称和窗口展示位置:
app=Tk() app_w=app.winfo_screenwidth() app_h=app.winfo_height() width=350 heigh=260 x=(app_w-width)/2 y=(app_h-heigh)/2 app.geometry('350x260+600+300') #app.geometry("%dx%d+%d+%d" % (width,heigh,x,y)) app.title("文件助手")
之后我们要把获取的路径显示出来:
Label(app,text='picture',image=photo).pack() Label(app,text='文件助手',font={'Airal',20,'bold'}).place(x=140,y=1,anchor='nw') lable_path=Label(app,name='path') lable_path.place(x=85,y=90,anchor='nw') f_name=''
3.选择目录
选择目录后,保存目录的路径
def select_dir(): global f_name f_name = askdirectory() lable_path['text']=f_name
获取文件目录和文件名称,创建目标目录,并把统一类别文件移动到该目录:
def clean(f): forder_name = f_name + '/' + f.split('.')[-1] file_name = f_name + '/' + f if not os.path.exists(forder_name): os.makedirs(forder_name) elif os.path.exists(forder_name + '/' + f): return else: shutil.move(file_name,forder_name)
根据文件的后缀进行归类:
def sort(): count=0 for f in os.listdir(f_name): if '.' in f: clean(f) count += 1 messagebox.showinfo(title='提示',message='你已经成功整理了%d个文件'%count)
最后我们来设计解压缩功能,这里先对文件进行判断是否为压缩文件,之后进行解压到该目录:
def unzip_file(): zip_name = askopenfilename()#压缩包名 r = zipfile.is_zipfile(zip_name) if r: fz = zipfile.ZipFile(zip_name) for file in fz.namelist(): print(file) fz.extract(file, f_name) messagebox.showinfo(title='提示', message='已解压该文件') else: messagebox.showinfo(title='提示', message='这不是压缩文件')
最后我们再给我们的窗口设定按钮接口:
bt1=Button(app,text='选择目录',command=select_dir) bt1.place(x=50,y=170,anchor='nw') bt1=Button(app,text='整理文件',command=sort) bt1.place(x=145,y=170,anchor='nw') bt1=Button(app,text='解压文件',command=unzip_file) bt1.place(x=235,y=170,anchor='nw') app.mainloop()
大家还可以插入自己想要的图片,更加美观:
选择目录后自动保存路径显示:
我们可以进行测试,在测试目录下创建不同类型的文件:
选择目录分类:
效果: