# Cancella cartelle vuote
# V001 20230811 20230308 Individua le cartelle vuote e propone di cancellarle. Inserita l'opzione "all" per cancellare tutte le cartelle vuote in un solo passaggio.

import os
from datetime import datetime
import sys

# 20230309 https://living-sun.com/it/python/720535-how-to-count-the-number-of-files-in-a-directory-using-python-python-count-glob.html
def conta_file(dir):
    return len([1 for x in list(os.scandir(dir)) if x.is_file()])

def conta_cartelle(dir):
    return len([1 for x in list(os.scandir(dir)) if x.is_dir()])

print("\033[92m")
print("Cancella cartelle vuote - V. 001")
print("")
print("Stiamo per cancellare le cartelle vuote contenute in \033[0m" + os.path.dirname(os.path.realpath(__file__)) +"\\\033[92m tra poco dovrai confermare la cancellazione \nIn ogni momento Ctrl+c interromperà l'esecuzione.")
print("")
print("")

# 20230308 https://stackoverflow.com/questions/49882682/how-do-i-list-folder-in-directory

filenames= os.listdir (".") # get all files' and folders' names in the current directory

cancella_tutte_le_cartelle=0
cartelle_da_cancellare=0
cartelle_cancellate=0
cartelle_conservate=0

for filename in filenames: # loop through all the files and folders

    if os.path.isdir(os.path.join(os.path.abspath("."), filename)): # check whether the current object is a folder or not
        #sono in una cartella
        numero_cartelle= conta_cartelle(filename)
        numero_file = conta_file(filename)

        #if numero_cartelle==0 and numero_file>0:
            #print(filename, " [Cartelle ", str(numero_cartelle), ", file ", str(numero_file), ", da conservare]")

        #if numero_cartelle>0 and numero_file>0:
            #print(filename, " [Cartelle ", str(numero_cartelle), ", file ", str(numero_file), ", da conservare]")

        #if numero_cartelle>0 and numero_file==0:
            #print(filename, " [Cartelle ", str(numero_cartelle), ", file ", str(numero_file), ", prudentemente meglio non cancellare]")
            # In realtà qui occorrerebbe scandagliare le sotto cartelle, i rami vuoti si potrebbero cancellare!

        if numero_cartelle==0 and numero_file==0:
            # Cartella vuota
            cartelle_da_cancellare+=1

            if cancella_tutte_le_cartelle==1:
                conferma_cancellare=="a"
            
            elif cancella_tutte_le_cartelle==0:
                print("La cartella",filename, "contiente [Cartelle", str(numero_cartelle), ", file", str(numero_file), ", si potrebbe cancellare]")
                conferma_cancellare=input("Cancello "+filename+"? [(y) yes | (n) no | (a) all] | ? Info ]")

            if conferma_cancellare=="?":
                print("\n\n\033[93m--- Informazioni ---\033[92m")
                print("Cancella cartelle vuote, scorre le cartelle contenute nella cartella corrente e solamente per quelle vuote chiede se si intende procedere con l'eliminazione.")
                print("\n\n\033[93m--- Limiti superati ---\033[92m")
                print("\nL'opzione A consente di cancellare tutte le cartelle vuote.")
                print("\nAl momento sono presenti solo alcuni controlli di coerenza dei dati immessi!")
                print("\n\n\033[93m--- Attuali limiti ---\033[92m")
                print("\nUna cartella contenente una cartella vuota non verrà proposta tra quelle eliminabili.")
                print("\nIl programma è stato provato con Python 3.9.7 in un pc con Windows 11. Non si sa cosa possa succedere con altri sistemi o versioni!!!")
                print("\n\n\033[93m--- Garanzie ---\033[92m")
                print("\nNon vi è alcuna garanzia sul funzionamento corretto o imprevisto e sugli eventuali danni che ne possono derivare.")
                continuare=input("\n\n   Premere Invio per continuare.")
                print("\n\n\033[93m--- La storia ---\033[92m")
                print("\nDopo il successo di MK'n'DIR il programma che crea diverse cartelle in un colpo solo (successo nel senso che funziona bene per le mie esigenze), mi sono lasciato prendere la mano creando poche decine di cartelle alla volta, senza poi utilizzarle tutte. Così avevo risolto un problema, quello di non dover creare e rinominare cartelle a mano, ma me ne ero procurato subito uno nuovo: avere una cartella con diverse sottocartelle inutili poichè lasciate vuote. \"Cancella cartelle vuote\" risolve questo secondo problema!")
                print("\n\n\033[93m--- Ultima versione ---\033[92m")
                print("\nUna versione aggiornata di \"Cancella cartelle vuote\" si trova sul sito www.gremmo.it e lì si trovano anche i riferimenti per segnalare eventuali errori o malfunzionamenti!")
                finito=input("\n\n   Premere Invio per chiudere.")

            if conferma_cancellare=="y":
                # Cancello
                os.rmdir(filename)
                cartelle_cancellate+=1
                print("Cancellato cartella ",filename)

            elif conferma_cancellare=="n":
                # Non cancello
                cartelle_conservate+=1
                print("Cartella conservata  ")

            elif conferma_cancellare=="a":
                # Cancello tutte
                os.rmdir(filename)
                cartelle_cancellate+=1
                print("Cancellato cartella ",filename)
                cancella_tutte_le_cartelle=1

if cartelle_da_cancellare==0:
    print("Non ho trovato cartelle da cancellare!\n")

print("-----------------------------")
print ("Cartelle da cancellare ",cartelle_da_cancellare)
print ("Cartelle cancellate ",cartelle_cancellate)
print ("Cartelle conservate ",cartelle_conservate)
print("-----------------------------")
    
print("")
finito=input("Finito! (Premere Invio per chiudere)")
