博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python写的本地搜索小工具
阅读量:2225 次
发布时间:2019-05-09

本文共 4084 字,大约阅读时间需要 13 分钟。

给一个不太懂电脑但会编辑管理很多文件的老总写的工具程序,查找几天前编辑的文件并导入到一个csv文件中。

其中碰到的困难主要是界面布置和中文支持。但现在算是通过。支持中文windows xp的文件名和路径,其他平台没有测试。

并用py2exe生成了exe文件发布。

 

工具界面:

 

  1. #coding=utf-8
  2. #small search tool by tkinter
  3. #test plat form: Windows XP Chinese
  4. #version 0.5
  5. #file name: find.py
  6. #author: zhouhh
  7. #date: 2008.12.16
  8. #email:ablozhou # gmail.com
  9. #note:to search files modified a few days ago
  10. #debug tool: PythonWin
  11. #python version: 2.5.2
  12. import os;
  13. import time;
  14. from Tkinter import *
  15. class capp:
  16.     ''''' 对输入的路径和文件后缀以及编辑的天数进行搜索,并在输入路径下生成一个csv结果文件。'''
  17.     def __init__(self,master):
  18.         ''''' file search tool 0.5 by zhouhaihan@cvtt.cn 周海汉 '''
  19.         frame1 = Frame(master)
  20.         frame1.pack()
  21.         self.quest = Label(frame1,bitmap='questhead')
  22.         self.quest.pack(side=LEFT)
  23.         #self.button = Button(frame,text='Quit',fg='red',command=frame.quit)
  24.         #self.button.pack(side=LEFT)
  25.         self.dirlable=Label(frame1,text=unicode('输入搜索路径: ','gbk'),font=('songti',9))
  26.         self.dirlable.pack(side=LEFT)
  27.         self.entry = Entry(frame1,font=('songti',9),width=65)
  28.         self.entry.pack(side=LEFT)
  29.         frame = Frame(master)
  30.         frame.pack()
  31.         self.lblext=Label(frame,text=unicode('      文件后缀名: ','gbk'),font=('songti',9))
  32.         self.lblext.pack(side=LEFT)
  33.         
  34.         self.ext = Entry(frame,width=15)
  35.         self.ext.pack(side=LEFT)
  36.         self.extstr=StringVar()
  37.         self.extstr.set(u'*.xls')
  38.         self.ext['textvariable']=self.extstr
  39.         self.contents = StringVar()
  40.         self.contents.set(u'')
  41.         self.entry['textvariable']=self.contents
  42.         self.daylable=Label(frame,text=unicode('   修改时间(几天前):','gbk'),font=('songti',9))
  43.         self.daylable.pack(side=LEFT)        
  44.         self.days = Entry(frame,width=15)
  45.         self.days.pack(side=LEFT)
  46.         self.daystr=StringVar()
  47.         self.daystr.set('1')
  48.         self.days['textvariable']=self.daystr 
  49.         self.hello =  Button(frame,text=unicode('查找','gbk'),font=('songti',12,'bold'),fg='red',bg='white',height=2,width=8,command=self.sayhi)
  50.         self.hello.pack(side=LEFT)
  51.         frame3 = Frame(master)
  52.         frame3.pack()
  53.         self.msg = Label(frame3,text=unicode('','gbk'))
  54.         self.msg.pack(side=LEFT)
  55.         
  56.     def sayhi(self):
  57.         print 'begining ... '
  58.         self.msg.config(text='...')
  59.         try:
  60.             mydir = self.contents.get()
  61.             mydays = self.daystr.get()
  62.             myext =self.extstr.get()
  63.             file1 = open(os.path.join(mydir,'result.csv'),'a+')
  64.             searchinfo = '/nsearch '+myext+' in '+mydays+' days. seach time:'+time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))+' /n'
  65.             file1.write(searchinfo)
  66.             file1.write('File name, Modify time, Size (bytes), Directory/n'
  67.             self.listfile(mydir,file1,mydays,myext)
  68.             file1.close()
  69.             self.msg.config(text=unicode('搜索成功!','gbk'),font=('songti',9))        
  70.         except IOError,(errno,strerror):
  71.             print 'IO error %s: %s' % (errno,strerror)
  72.             self.msg.config(text = 'IO error %s: %s' % (errno,strerror))
  73.         except:
  74.             print "Unexpected error:", sys.exc_info()[0]
  75.             self.msg.config(text='error '+str(sys.exc_info()[0]))
  76.             file1.close()
  77.             raise
  78.     def listfile(self,dirname,file1,days,ext):
  79.         ''''' search files ... '''
  80.         if len(ext) >0 :
  81.             ext = os.path.splitext(ext)[1]
  82.         if len(dirname) > 0:
  83.             os.chdir(dirname)
  84.         dirname = os.getcwd()
  85.         print '['+dirname+']:'
  86.         names = os.listdir(dirname)
  87.         
  88.         dirs=[]
  89.         for filename in names:
  90.             fullname = os.path.join(dirname,filename)
  91.             if  os.path.isdir(fullname):
  92.                 dirs.append(fullname)
  93.                 continue
  94.             if len(ext) > 0:
  95.                 if os.path.splitext(filename)[1]!=ext :
  96.                     status = 'ignore '+filename+' for extension'
  97.                     print status
  98.                     self.msg.config(text=unicode(status,'gbk'),font=('songti',9))
  99.                     continue;
  100.                 
  101.             t = os.path.getmtime(fullname)
  102.             tnow = time.time()
  103.             #print fullname,' ignore',tnow,t,tnow-t,86400*int(days)
  104.             if len(days) > 0 :
  105.                 if( (tnow -t) > 86400*int(days)):
  106.                     status = 'ignore '+filename+' for date'
  107.                     print status
  108.                     self.msg.config(text=unicode(status,'gbk'),font=('songti',9))
  109.                     continue;
  110.             mt = time.localtime(t)
  111.             size = os.path.getsize(fullname)
  112.             fileinfo = filename+','+time.strftime('%Y-%m-%d %H:%M:%S',mt)+','+str(size)+','+dirname+'/n'
  113.             print fileinfo
  114.             file1.write(fileinfo)
  115.     
  116.         for dirname in dirs:
  117.             self.listfile(dirname,file1,days,ext)
  118.             
  119. if __name__=='__main__':
  120.     #reload(sys)
  121.     #sys.setdefaultencoding('utf8')
  122.     root = Tk()
  123.     root.title(unicode("搜索工具-0.5- 周海汉 2008.12.16",'gbk'))
  124.     app = capp(root)
  125.     root.mainloop()
  126.     
  127.         

py2exe 的setup.py

  1. # setup.py
  2. from distutils.core import setup
  3. import py2exe
  4. setup(console=["find.py"])

执行,在命令行下输入:

  1. python setup.py py2exe
你可能感兴趣的文章
Java并发指南8:AQS中的公平锁与非公平锁,Condtion
查看>>
Java网络编程和NIO详解6:Linux epoll实现原理详解
查看>>
Java网络编程和NIO详解7:浅谈 Linux 中NIO Selector 的实现原理
查看>>
Java网络编程与NIO详解8:浅析mmap和Direct Buffer
查看>>
Java网络编程与NIO详解10:深度解读Tomcat中的NIO模型
查看>>
Java网络编程与NIO详解11:Tomcat中的Connector源码分析(NIO)
查看>>
深入理解JVM虚拟机1:JVM内存的结构与消失的永久代
查看>>
深入理解JVM虚拟机3:垃圾回收器详解
查看>>
深入理解JVM虚拟机4:Java class介绍与解析实践
查看>>
深入理解JVM虚拟机5:虚拟机字节码执行引擎
查看>>
深入理解JVM虚拟机6:深入理解JVM类加载机制
查看>>
深入了解JVM虚拟机8:Java的编译期优化与运行期优化
查看>>
深入理解JVM虚拟机9:JVM监控工具与诊断实践
查看>>
深入理解JVM虚拟机10:JVM常用参数以及调优实践
查看>>
深入理解JVM虚拟机12:JVM性能管理神器VisualVM介绍与实战
查看>>
深入理解JVM虚拟机13:再谈四种引用及GC实践
查看>>
Spring源码剖析1:Spring概述
查看>>
Spring源码剖析2:初探Spring IOC核心流程
查看>>
Spring源码剖析5:JDK和cglib动态代理原理详解
查看>>
Spring源码剖析6:Spring AOP概述
查看>>