Este es un programa similar al listador de archivos (Enlace), Este programa busca todos los archivos con algún nombre o extension en específico que esten en una direccion dada, guarda el resultado de la búsqueda en un archivo de texto tambien da la opcion de borrarlos. Muy util cuando hay muchos archivos indeseables con diferentes nombres o extensiones.
Lo modifiqué para que se pudiera buscar mas de un tipo de archivo o nomnre. Se deben poner en una lista serarada por una coma como se muestra. Al terminar la búsqueda, en la barra de estado muestra cuantos archivos encontró.
Requiere wxpython y python 3 para correr este programa.
import wx
from os import getcwd
from os import walk
from os import stat
from os.path import isfile
from os import remove
class MyFrame(wx.Frame):
def __init__(self, parent, title ="Borrador multiple"):
super().__init__(parent, title = title , size = (600,240))
self.SetMinSize(size = (600,240)) #Set minimum size to current
self.locale = wx.Locale(wx.LANGUAGE_ENGLISH) # Fix locale unknown error
self.Dir = getcwd() #directorio por defecto
self.DirSve = getcwd()+"\DefaultName.txt" #directorio por defecto
#--------------------------------------------------
# Widgets
#---------------------------------------------------
self.CreateStatusBar()
self.SetStatusText("")
panel = wx.Panel(self, wx.ID_ANY)
BtnDirSrch = wx.Button(panel, label="Dir. Busqueda")
self.TxtDirSrch = wx.TextCtrl( panel, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
self.TxtDirSrch.SetEditable(False)
self.TxtDirSrch.SetValue(self.Dir)
BtnDirRes = wx.Button(panel, label="Dir. Guardar")
self.TxtDirRes = wx.TextCtrl( panel, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
self.TxtDirRes.SetEditable(False)
self.TxtDirRes.SetValue(self.DirSve)
self.TxtFleToSrch = wx.TextCtrl( panel, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
self.TxtFleToSrch.SetEditable(True)
LblNombre = wx.StaticText(panel)
LblNombre.SetLabel("extencion o nombre")
BtnProcesar = wx.Button(panel, label="BUSCAR Y GENERAR LISTA")
BtnBorrar = wx.Button(panel, label="BORRAR ARCHIVOS!!!!!")
#--------------------------------------------------
# BINDS
#--------------------------------------------------
BtnProcesar.Bind(wx.EVT_BUTTON, self.onSearch )
BtnDirSrch .Bind(wx.EVT_BUTTON, self.onDirSrch)
BtnDirRes .Bind(wx.EVT_BUTTON, self.onDirSve )
BtnBorrar .Bind(wx.EVT_BUTTON, self.onErseFles)
#--------------------------------------------------
# LAYOUT
#--------------------------------------------------
MainSizer = wx.BoxSizer(wx.VERTICAL)
sizrGrid = wx.FlexGridSizer(rows=3, cols=2, hgap=5, vgap=5)
sizrGrid.AddGrowableCol(1, 1)
sizrGrid.Add(BtnDirSrch, 0, wx.CENTER)
sizrGrid.Add(self.TxtDirSrch, 1, wx.CENTER|wx.EXPAND)
sizrGrid.Add(BtnDirRes, 0, wx.CENTER)
sizrGrid.Add(self.TxtDirRes, 1, wx.CENTER|wx.EXPAND)
sizrGrid.Add(LblNombre, 0, wx.CENTER)
sizrGrid.Add(self.TxtFleToSrch, 0, wx.CENTER|wx.EXPAND)
MainSizer.Add(sizrGrid, 0,wx.ALL|wx.EXPAND,5)
MainSizer.Add(BtnProcesar,1,wx.ALL|wx.EXPAND,5)
MainSizer.Add(BtnBorrar, 1,wx.ALL|wx.EXPAND,5)
panel.SetSizer(MainSizer)
def cleanText(self):
#-------------------------------------------
# Palabras no necesarias
#-------------------------------------------
quitar = ['', #en blanco
'de',
'del',
'el',
'la',
'los',
'las',
'y',
'en',
'con',
'para',
'por',
'a',
'desde',
'hacia',
'excepto',
'entre',
'sin',
'sobre',
'tras',
'contra',
'hasta',
'durante',
'mediante',
'también',
'tambien']
FindValue = self.TxtFleToSrch.GetValue() # obtener texto
#----------------------------------------------
# Tokenizar
#----------------------------------------------
FindValue = FindValue.replace(" ",",")
words = FindValue.split(',')
for x in quitar:
while x in words: # quitar de la lista palaras inesesarias
words.remove(x)
return words
def onSearch (self, event):
DirValuesFound = []
List = self.cleanText()
GetBusy = wx.BusyInfo("Procesandio, por favor espere", self) #Mostrar Leyenda (ocupado)
for root, dirs, files in walk(self.Dir):
for file in files:
for value in List:
if str(file).find(value) != -1:
DirValuesFound.append(root+'/'+str(file)) # Direccion completa
file = open(self.DirSve,'w')
for x in DirValuesFound:
file.write(x+"\n")
file.close()
self.SetStatusText("Se encontraron " + str(len(DirValuesFound))+ " archivos.")
del GetBusy # quitar leyenda (ocupado)
def onErseFles(self, evt):
RemovedCount = 0
if isfile(self.DirSve): #archivo existe
if not stat(self.DirSve).st_size == 0: # lista no vacia
file = open(self.DirSve,'r')
filesList = file.read().splitlines()
file.close()
for file in filesList:
try:
remove(file)
RemovedCount += 1
except:
pass
self.SetStatusText("Se borraron " + str(RemovedCount)+ " archivos.")
else:
self.SetStatusText('No has realizado ninguna busqueda \no el archivo generado fue borrado')
def onDirSrch(self, event):
dlg = wx.DirDialog(self, "Elegir directorio de busqueda:",
style=wx.DD_DEFAULT_STYLE
#| wx.DD_DIR_MUST_EXIST
#| wx.DD_CHANGE_DIR
)
if dlg.ShowModal() == wx.ID_OK:
self.Dir = dlg.GetPath()
self.TxtDirSrch.SetValue(self.Dir)
dlg.Destroy()
def onDirSve(self, event):
wildcard = "Text Files (*.txt)|*.txt"
dlg = wx.FileDialog(
self, message="Elegir dereccion y numbre",
defaultDir=self.DirSve,
defaultFile="", wildcard=wildcard, style=wx.FD_SAVE
)
if dlg.ShowModal() == wx.ID_OK:
self.DirSve = dlg.GetPath()
self.TxtDirRes.SetValue(self.DirSve)
dlg.Destroy()
app = wx.App(0)
frame = MyFrame(None)
app.SetTopWindow(frame)
frame.Show()
app.MainLoop()