xFinder - Ricerca file e cartelle [Python]
Inviato: 27/07/2024, 22:43

Codice: Seleziona tutto
import os
def search_files_and_folder(root_folder, search_name):
results = []
for root, dirs, files in os.walk(root_folder):
if search_name in dirs + files:
path = os.path.join(root, search_name)
name, ext = os.path.splitext(search_name)
dir_path = os.path.dirname(path)
dir_path = dir_path.replace('/', '\\')
size = os.path.getsize(path)
size_kb = "{:,} KB".format(round(size/1024, 1))
results.append((name, dir_path, ext, size_kb))
return results
# Definisci la cartella di partenza per la ricerca
cartella_di_partenza = "F:/Dev/Progetti"
# Definisci il nome del file o della cartella da cercare
nome_file_o_cartella = "array.wad"
# Chiama la funzione search_files_and_folder per cercare il file o la cartella
results = search_files_and_folder(cartella_di_partenza, nome_file_o_cartella)
# Stampa i risultati della ricerca
if results:
print(f"Trovati {len(results)} risultati per '{nome_file_o_cartella}':\n")
for result in results:
print(f"Nome: {result[0]}")
print(f"Percorso: {result[1]}")
print(f"Estensione: {result[2]}")
print(f"Dimensioni: {result[3]}")
else:
print(f"Nessun risultato trovato per '{nome_file_o_cartella}' nella cartella '{cartella_di_partenza}'.")
- Utilizzare la libreria pathlib invece di os per le operazioni sui percorsi:
La libreria pathlib offre una sintassi più pulita e orientata agli oggetti per le operazioni sui percorsi, ed è generalmente più facile da usare rispetto alla libreria os. Potresti provare a riscrivere la funzione search_files_and_folder utilizzando pathlib per migliorare la leggibilità e la manutenibilità del codice. - Utilizzare la funzione os.scandir invece di os.walk:
La funzione os.scandir è più veloce di os.walk, poiché restituisce direttamente gli oggetti DirEntry relativi ai file e alle cartelle nella directory specificata. In questo modo, non è necessario eseguire la ricorsione sui sotto-directory e risparmi tempo. - Utilizzare il modulo multiprocessing per parallelizzare la ricerca:
Se devi cercare in una grande quantità di file, potrebbe essere utile utilizzare il modulo multiprocessing per parallelizzare la ricerca su più processi. In questo modo, potresti sfruttare i multi-core del tuo processore e ridurre significativamente il tempo di esecuzione. - Utilizzare un generatore di espressioni per ridurre il consumo di memoria:
Invece di creare una lista di risultati, potresti utilizzare le espressioni generator per ridurre il consumo di memoria. In questo modo, la funzione restituirà un generatore, che permette di ottenere i risultati man mano che vengono generati, anziché doverli memorizzare tutti in memoria. - Utilizzare pathlib per la formattazione dei percorsi:
Quando devi convertire un percorso in un percorso Windows, anziché usare dir_path.replace('/', '\\'), potresti utilizzare il metodo as_posix() di pathlib.Path, che converte il percorso in un percorso POSIX e lo formatta automaticamente correttamente per la piattaforma corrente. - Utilizzarere la funzione fnmatch.fnmatch() per controllare se il nome del file o della cartella corrisponde al pattern specificato nella variabile search_name, che può contenere il carattere jolly * per rappresentare qualsiasi stringa di caratteri.