Windows文件检索、复制工具(Python Tkinter)
来源:互联网 发布:酒店市场数据分析 编辑:程序博客网 时间:2024/05/19 12:27
目前接到一个小任务,做一个Windows系统下的文件检索、复制工具。该任务采用Python自带的GUI 工具Tkinter书写界面,经过测试,功能稳定。
具体使用方法如下:
(1)上图中,方框3是tkinter写的文件检索、复制工具,其中“文件源路径”中输入的是方框1所在的路径信息,“文件目标路径”中输入的是方框2所在的路径信息,“待搜索文件名”
中输入的是带扩张名的文件名称。
切记要带扩展名!切记要带扩展名!切记要带扩展名!(重要的事情说三遍!)
(2)点击“搜索”,即可在“搜索到的同名文件列表”中显示目标文件夹中不同路径信息下的同名文件;
(3)点击列表中的目标文件,点击“复制”,即可完成复制操作,并有弹出框进行提示。
PS:若目标路径中已经存在目标文件,则会提示是否要覆盖!
PPS:该工具只能实现单个目标文件的检索、复制,后续小弟会进一步的完善。
具体的实现代码如下:
# -*- coding: UTF-8 -*- import osimport shutilimport collectionsfrom tkinter import *import tkinter.messageboxdef file_find_byName(): src=src_path.get() dest=des_path.get() name=file_name.get()# src='C:/Users/xsw-hp/Desktop/Original'# dest='D:/FileCopy'# name='file.txt' if os.path.exists(src)==False: str="您输入的文件源路径不存在!" tkinter.messagebox.showwarning("File_Copy Demo",str) print("您输入的文件源路径不存在!") else: #1. 存储源文件夹路径和文件名信息的字典 fp=collections.OrderedDict() #2. 存储目标文件序号和其在源文件夹中路径信息的字典 fpp={} count=0 #2.1 根据检索顺序自定义的目标文件序号 s=name.split('.') #2.2 将目标文件名与扩展名分开 #3. 在原文件夹路径中搜索目标文件 for dn,dns,fns in os.walk(src): for fl in fns: if ((os.path.splitext(fl)[0]==s[0]) and (os.path.splitext(fl)[1][1:]==s[1])) : if dn not in fp.keys(): fp[dn]=[] fpp[count]=dn count+=1 fp[dn].append(fl) #4. 打印原文件夹不同子目录下的同名目标文件列表 print('目标文件个数是:{0:^3},具体列表如下图所示:'.format(len(fpp))) file_listbox.delete(0, END) if len(fpp)>0: str='目标文件个数是:{0:^3},具体列表如下图所示:'.format(len(fpp)) file_listbox.insert(END,str) i=0 for k in fp.keys(): for ff in fp[k]: item=('{1:<2}---{0}').format(os.path.join(k,ff),i) file_listbox.insert(END,item) i+=1 else: str="您要查找的目标文件不存在!" tkinter.messagebox.showwarning("File_Copy Demo",str) print("您要查找的目标文件不存在!") def file_copy_byName(): src=src_path.get() dest=des_path.get() name=file_name.get() #5. 在同名目标文件列表中,选择要进行操作的一个目标文件 if file_listbox.size()>1: i=1 flag=0 while i<file_listbox.size(): if file_listbox.selection_includes(i): flag=1 break i+=1 if flag==1: print(i) str1=file_listbox.get(i).split('---')[1] relative_path=str1[len(src)+1:-len(name)-1] # 6. 确认目标文件在目标文件夹中的新路径信息 if len(relative_path)==0: newpath=dest; else: newpath=os.path.join(dest,relative_path) #6.1 文件对应的新文件夹路径 print('相对路径是: %s' % relative_path) print('新的路径 是: %s' % newpath) # 7. 从源文件夹到目标文件夹进行目标文件的复制操作 if os.path.exists(newpath): #7.1 若新路径文件夹已经存在 flag1=0 flag2=0 for dns,dnss,fnss in os.walk(newpath): #7.1.1 检索新路径文件夹中是否已经存在目标文件 if len(dns)>len(newpath): break for fl in fnss: if(fl==name): flag3=int(tkinter.messagebox.askokcancel("File_Copy Demo",('目标文件 “{0}” 已经存在!您确定要覆盖它吗?').format(os.path.join(newpath,fl)))) flag2=1 if flag3==0: flag1=1 str='您已经取消文件复制!' tkinter.messagebox.showinfo("File_Copy Demo",str) print('您已经取消文件复制!') break; # print(('目标文件 “{0}” 已经存在!您确定要覆盖它吗?').format(os.path.join(newpath,fl)))# Confirm=input('请输入 “Y/N”:'); #7.1.1.1 是否对新路径文件夹中已经存在目标文件进行覆盖# if Confirm=='Y':# flag1=0# flag2=1# break;# else:# flag1=1# flag2=1# print('您已经取消文件复制!')# break; if(flag2==1): break if(flag1==0): #7.1.2 目标文件的拷贝 oldfile=os.path.join(src,name) shutil.copy(str1,newpath) str='已经复制 目标文件 "'+oldfile+'" 至 "'+ newpath+'" 。' tkinter.messagebox.showinfo("File_Copy Demo",str) else: #7.2 若新路径文件夹还未建立,直接复制目标文件 os.makedirs(newpath) oldfile=os.path.join(src,name) shutil.copy(str1,newpath) str='已经复制 目标文件 "'+oldfile+'" 至 "'+ newpath+'" 。' tkinter.messagebox.showinfo("File_Copy Demo",str) print(str) else: str="您未选中任何文件!" tkinter.messagebox.showwarning("File_Copy Demo",str) print(str) else: str="您要查找的文件不存在!" tkinter.messagebox.showwarning("File_Copy Demo",str) print(str) # 0. Tkinter客户端界面的结构布局 root=Tk() root.title("File-Copy-By-Name")Label(root,width=15,text='文件源路径:',relief=RIDGE).grid(row=0,column=0,sticky=W)src_path=Entry(root,width=30,relief=RIDGE)src_path.grid(row=0,column=1,padx=5,pady=3,sticky=W)Label(root,width=15,text='文件目标路径:',relief=RIDGE).grid(row=1,column=0,sticky=W)des_path=Entry(root,width=30,relief=RIDGE)des_path.grid(row=1,column=1,padx=5,pady=3,sticky=W)Label(root,width=15,text='待搜索文件名:',relief=RIDGE).grid(row=2,column=0,sticky=W)file_name=Entry(root,width=23,relief=RIDGE)file_name.grid(row=2,column=1,padx=5,sticky=W)file_search=Button(root,padx=3,text='搜索',command=file_find_byName)file_search.grid(row=2,column=1,padx=5,pady=3,sticky=E)Label(root,width=39,pady=2,text='搜索到的同名文件列表',relief=RIDGE).grid(row=3,column=0,columnspan=2,padx=3,pady=3,sticky=W)file_copy=Button(root,padx=3,text='复制',command=file_copy_byName)file_copy.grid(row=3,column=1,padx=5,pady=3,sticky=E)file_listbox=Listbox(root,width=45,height=5,selectmode=BROWSE,relief=RIDGE)file_listbox.grid(row=4,column=0,columnspan=2,padx=3,pady=5)root.mainloop() # file_copy_byName('C:/Users/xsw-hp/Desktop/Original','D:/FileCopy','finddup.py') #0. 'file.txt' 'filepath.txt' 'sysTest.py' 'finddup.py' '新建文本文档.txt'
阅读全文
0 0
- Windows文件检索、复制工具(Python Tkinter)
- 用python Tkinter编写简单的文件搜索工具
- Python GUI (Tkinter)
- python Tkinter (1)
- Tkinter(python-GUI)
- Python Tkinter Hello,Tkinter
- python 文件操作学习 Tkinter GUI
- Windows下快速复制文件工具Robocopy介绍
- windows与linux复制文件(类似于linux的scp工具)
- python tkinter
- python:Tkinter
- Python Tkinter
- Python文件复制(txt文件)
- Windows下实现文件检索
- 文件复制工具dd
- Unity 文件复制工具
- 用Tkinter + Python做的简单网络配置工具
- 学习python tkinter 写的一个工具界面
- s2sh 分发服务
- Java transient关键字使用小记
- 最大似然估计(MLE)和最大后验概率(MAP)
- 排序程序总结
- Quadtree plus binary tree (QTBT) block structure
- Windows文件检索、复制工具(Python Tkinter)
- C# 详解反射
- STL的使用方法(很全)
- 剑指offer面试题目:不能被继承的类
- PCIe学习笔记(31)--- PL-Logical (Gen 1 and Gen 2) --- (3)
- leetcode --100. Same Tree
- Linux下使用docker搭建STF(踩坑成功)
- hover改变子标签/同级标签样式
- 测试技能图谱