funzioni
esempio: sposto o copio con sovrascrittura i files Excel delle sottodirectories nella root
# estensioni dei files Excel e testo da cercare e non trovare
estensioni_excel = ['.xls', '.xlsx', '.xlsm', '.xlsb', '.xlt', '.xltx', '.xltm']
testo_da_cercare = 'MIO'
testo_da_evitare = '- Copy'
# converti i parametri in un oggetto Path
origine_path = Path(origine_dir)
destinazione_path = Path(destinazione_dir)
# cerca tutte le sottodirectory e i files nella origine
for subdir, _, files in os.walk(origine_path):
# scorri tutti i files
for file_name in files:
# creata la path completa del file (si usa / per concatenare)
file_path = Path(subdir) / file_name
# verifica se ha l'estensione dela lista e se contiene il testo
if file_path.suffix in estensioni_excel and testo_da_cercare in file_name and testo_da_evitare not in file_name:
# costruisci il percorso di destinazione nella root directory (si usa / per concatenare)
destinazione = destinazione_path / file_name
try:# copia/muovi il file nella root, sovrascrivendo se necessario
shutil.copy(file_path, destinazione) #COPIA
shutil.move(file_path, destinazione) # MUOVI
print(f"File spostato: {file_path} -> {destinazione}")
except Exception as e:print(f"Errore nello spostamento del file {file_path}: {e}")
# per ciasuna subdirectory
for root, dirs, files in os.walk(root_dir):
# per ciasun files delle subdirectories
for file in files:
# se il file finisce per .xlsx o .xls
if file.endswith('.xlsx') or file.endswith('.xls'):
# creo oggetti path concatenando directory e file
src_file = os.path.join(root, file)
dest_file = os.path.join(root_dir, file)
# verifica se il file di destinazione esiste già
if os.path.exists(dest_file):
# chiedi conferma all'utente prima di sovrascrivere
overwrite = input(f"Il file {dest_file} esiste già. Sovrascrivere? (s/n): ")
# se conferma salta il file
if overwrite.lower() != 's':continue
# sposta il file con sovrascrittura
shutil.move(src_file, dest_file)
print(f"File spostato: {src_file} -> {dest_file}")
esempio: verifico le subdirectories e se sono vuote le cancello
import os
from pathlib import Path
def cancella_sottodirectory_vuote(root_dir):
# converti la root_dir in un oggetto Path
root_path = Path(root_dir)
# scorre tutte le sottodirectory
for subdir, dirs, files in os.walk(root_path, topdown=False):
# converti la subdir in un oggetto Path
subdir_path = Path(subdir)
# verifica se la directory è vuota (nessun file e nessuna sottodirectory)
if not any(subdir_path.iterdir()):
try:# cancella la directory vuotaexcept Exception as e:
os.rmdir(subdir_path)
print(f"Sottodirectory vuota cancellata: {subdir_path}")
print(f"Errore nella cancellazione della directory {subdir_path}: {e}")