给一个不太懂电脑但会编辑管理很多文件的老总写的工具程序,查找几天前编辑的文件并导入到一个csv文件中。
其中碰到的困难主要是界面布置和中文支持。但现在算是通过。支持中文windows xp的文件名和路径,其他平台没有测试。
并用py2exe生成了exe文件发布。
工具界面:
- #coding=utf-8
- #smallsearchtoolbytkinter
- #testplatform:WindowsXPChinese
- #version0.5
- #file name: find.py
- #author:zhouhh
- #date:2008.12.16
- #email:ablozhou#gmail.com
- #note:tosearchfilesmodifiedafewdaysago
- #debugtool:PythonWin
- #pythonversion:2.5.2
- importos;
- importtime;
- fromTkinterimport*
- classcapp:
- '''''对输入的路径和文件后缀以及编辑的天数进行搜索,并在输入路径下生成一个csv结果文件。'''
- def__init__(self,master):
- '''''filesearchtool0.5byzhouhaihan@cvtt.cn周海汉'''
- frame1=Frame(master)
- frame1.pack()
- self.quest=Label(frame1,bitmap='questhead')
- self.quest.pack(side=LEFT)
- #self.button=Button(frame,text='Quit',fg='red',command=frame.quit)
- #self.button.pack(side=LEFT)
- self.dirlable=Label(frame1,text=unicode('输入搜索路径:','gbk'),font=('songti',9))
- self.dirlable.pack(side=LEFT)
- self.entry=Entry(frame1,font=('songti',9),width=65)
- self.entry.pack(side=LEFT)
- frame=Frame(master)
- frame.pack()
- self.lblext=Label(frame,text=unicode('文件后缀名:','gbk'),font=('songti',9))
- self.lblext.pack(side=LEFT)
- self.ext=Entry(frame,width=15)
- self.ext.pack(side=LEFT)
- self.extstr=StringVar()
- self.extstr.set(u'*.xls')
- self.ext['textvariable']=self.extstr
- self.contents=StringVar()
- self.contents.set(u'')
- self.entry['textvariable']=self.contents
- self.daylable=Label(frame,text=unicode('修改时间(几天前):','gbk'),font=('songti',9))
- self.daylable.pack(side=LEFT)
- self.days=Entry(frame,width=15)
- self.days.pack(side=LEFT)
- self.daystr=StringVar()
- self.daystr.set('1')
- self.days['textvariable']=self.daystr
- self.hello=Button(frame,text=unicode('查找','gbk'),font=('songti',12,'bold'),fg='red',bg='white',height=2,width=8,command=self.sayhi)
- self.hello.pack(side=LEFT)
- frame3=Frame(master)
- frame3.pack()
- self.msg=Label(frame3,text=unicode('','gbk'))
- self.msg.pack(side=LEFT)
- defsayhi(self):
- print'begining...'
- self.msg.config(text='...')
- try:
- mydir=self.contents.get()
- mydays=self.daystr.get()
- myext=self.extstr.get()
- file1=open(os.path.join(mydir,'result.csv'),'a+')
- searchinfo='\nsearch'+myext+'in'+mydays+'days.seachtime:'+time.strftime('%Y-%m-%d%H:%M:%S',time.localtime(time.time()))+'\n'
- file1.write(searchinfo)
- file1.write('Filename,Modifytime,Size(bytes),Directory\n')
- self.listfile(mydir,file1,mydays,myext)
- file1.close()
- self.msg.config(text=unicode('搜索成功!','gbk'),font=('songti',9))
- exceptIOError,(errno,strerror):
- print'IOerror%s:%s'%(errno,strerror)
- self.msg.config(text='IOerror%s:%s'%(errno,strerror))
- except:
- print"Unexpectederror:",sys.exc_info()[0]
- self.msg.config(text='error'+str(sys.exc_info()[0]))
- file1.close()
- raise
- deflistfile(self,dirname,file1,days,ext):
- '''''searchfiles...'''
- iflen(ext)>0:
- ext=os.path.splitext(ext)[1]
- iflen(dirname)>0:
- os.chdir(dirname)
- dirname=os.getcwd()
- print'['+dirname+']:'
- names=os.listdir(dirname)
- dirs=[]
- forfilenameinnames:
- fullname=os.path.join(dirname,filename)
- ifos.path.isdir(fullname):
- dirs.append(fullname)
- continue
- iflen(ext)>0:
- ifos.path.splitext(filename)[1]!=ext:
- status='ignore'+filename+'forextension'
- printstatus
- self.msg.config(text=unicode(status,'gbk'),font=('songti',9))
- continue;
- t=os.path.getmtime(fullname)
- tnow=time.time()
- #printfullname,'ignore',tnow,t,tnow-t,86400*int(days)
- iflen(days)>0:
- if((tnow-t)>86400*int(days)):
- status='ignore'+filename+'fordate'
- printstatus
- self.msg.config(text=unicode(status,'gbk'),font=('songti',9))
- continue;
- mt=time.localtime(t)
- size=os.path.getsize(fullname)
- fileinfo=filename+','+time.strftime('%Y-%m-%d%H:%M:%S',mt)+','+str(size)+','+dirname+'\n'
- printfileinfo
- file1.write(fileinfo)
- fordirnameindirs:
- self.listfile(dirname,file1,days,ext)
- if__name__=='__main__':
- #reload(sys)
- #sys.setdefaultencoding('utf8')
- root=Tk()
- root.title(unicode("搜索工具-0.5-周海汉2008.12.16",'gbk'))
- app=capp(root)
- root.mainloop()
py2exe 的setup.py
- #setup.py
- fromdistutils.coreimportsetup
- importpy2exe
- setup(console=["find.py"])
执行,在命令行下输入:
- pythonsetup.pypy2exe