python文件查找

上一篇 / 下一篇  2016-07-20 15:13:36 / 个人分类:python

#!/usr/bin/env python 
#-*- encoding:utf8 -*-
import wx 
import os,os.path,itertools
import re
import wmi
from threading import Thread,activeCount
import sys
reload(sys)
sys.setdefaultencoding('utf8')

def getdiskpart():
    """返回电脑磁盘分区情况
    """
    diskpartlist=[]
    c = wmi.WMI()
    for physical_disk in c.Win32_DiskDrive():
        for partition in physical_disk.associators("Win32_DiskDriveToDiskPartition"):
            for logical_disk in partition.associators("Win32_LogicalDiskToPartition"):
                diskpartlist.append(logical_disk.Caption)
    return diskpartlist

#filenamelist=[]

class MenuEventFrame(wx.Frame): 
    def __init__(self, parent, id): 
        wx.Frame.__init__(self, parent, id, u'文件查找',size=(400,500))
        self.initUI()
        self.Center()
        #self.search_thread

    def initUI(self):
        self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )       
        fgSizer2 = wx.FlexGridSizer( 4, 2, 0, 0 )
        fgSizer2.AddGrowableCol( 1 )
        fgSizer2.AddGrowableRow( 3 )
        fgSizer2.SetFlexibleDirection( wx.BOTH )
        fgSizer2.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED )
        
        fgSizer2.SetMinSize( wx.Size( 2,4 ) ) 
        self.m_staticText18 = wx.StaticText( self, wx.ID_ANY, u"路径", wx.DefaultPosition, wx.DefaultSize, 0 )
        self.m_staticText18.Wrap( -1 )
        fgSizer2.Add( self.m_staticText18, 0, wx.ALL, 5 )
        
        self.pathvalue = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
        fgSizer2.Add( self.pathvalue, 0, wx.ALL|wx.EXPAND, 5 )
        
        self.m_staticText19 = wx.StaticText( self, wx.ID_ANY, u"文件格式", wx.DefaultPosition, wx.DefaultSize, 0 )
        self.m_staticText19.Wrap( -1 )
        fgSizer2.Add( self.m_staticText19, 0, wx.ALL, 5 )
        
        self.fromatvalue = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
        fgSizer2.Add( self.fromatvalue, 0, wx.ALL|wx.EXPAND, 5 )
        
        self.m_staticText20 = wx.StaticText( self, wx.ID_ANY, u"", wx.DefaultPosition, wx.DefaultSize, 0 )
        self.m_staticText20.Wrap( -1 )
        fgSizer2.Add( self.m_staticText20, 0, wx.ALL, 5 )

        
        self.button = wx.Button( self, wx.ID_ANY, u"查询", wx.DefaultPosition, wx.DefaultSize, 0 )
        fgSizer2.Add( self.button, 0, wx.ALL|wx.ALIGN_RIGHT, 5 )
        
        self.m_staticText21 = wx.StaticText( self, wx.ID_ANY, u"结果", wx.DefaultPosition, wx.DefaultSize, 0 )
        self.m_staticText21.Wrap( -1 )
        fgSizer2.Add( self.m_staticText21, 0, wx.ALL, 5 )
        
        self.m_textCtrl8 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.HSCROLL|wx.TE_READONLY|wx.TE_MULTILINE )
        fgSizer2.Add( self.m_textCtrl8, 0, wx.ALL|wx.EXPAND, 5 )
        
        
        self.SetSizer( fgSizer2 )
        self.Layout()        
        self.Centre( wx.BOTH )
        self.Bind(wx.EVT_BUTTON,self.OnClick,self.button)

    def work_func(self,searchfile,path,value,textctrl):
        try:
            print activeCount()
            textctrl.Disable()
            self.button.Disable()
            searchfile(path,value,textctrl)   
        except Exception, e:
            raise
        finally:
            textctrl.Enable()
            self.button.Enable()

    def OnClick(self,event):
   
            self.m_textCtrl8.SetValue("")

            if self.fromatvalue.GetValue() == '':
                wx.MessageBox(u"请输入要查找的文件格式")
                return

            value=self.fromatvalue.GetValue().split()

            if self.pathvalue.GetValue()=='':
                for dirr in getdiskpart():
                    path=dirr
                    self.search_thread = Thread(target=self.work_func,args=(searchfile,path,value,self.m_textCtrl8))
                    self.search_thread.start()
                    
            else:
                path=self.pathvalue.GetValue()
                if not os.path.isdir(path):
                  
                    wx.MessageBox(u'请输入正确的路径')
                    return
                self.search_thread = Thread(target=self.work_func,args=(searchfile,path,value,self.m_textCtrl8))
                self.search_thread.start()
               
def anyTrue(filename, sequence):
    return True in itertools.imap(filename.endswith, sequence)


def searchfile(path,endswithformate,textctrl):
    for basedir,dirlist,filenames in os.walk(path):
            for x in filenames:
                if anyTrue(x,endswithformate):
                    textctrl.WriteText(os.path.join(basedir,x)+os.linesep)



if __name__ == '__main__': 
    app = wx.App() 
    frame. = MenuEventFrame(parent=None, id=-1) 
    frame.Show() 
    app.MainLoop() 
















TAG: Python python

 

评分:0

我来说两句

Open Toolbar