GNU/Linux >> Linux Esercitazione >  >> Linux

os.walk senza cartelle nascoste

Mi rendo conto che non è stato posto nella domanda, ma ho avuto un problema simile in cui volevo escludere sia i file nascosti che i file che iniziano con __ , in particolare __pycache__ directory. Sono arrivato a questa domanda perché stavo cercando di capire perché la mia comprensione dell'elenco non stava facendo quello che mi aspettavo. Non stavo modificando l'elenco in vigore con dirnames[:] .

Ho creato un elenco di prefissi che volevo escludere e ho modificato i dirname in questo modo:

    exclude_prefixes = ('__', '.')  # exclusion prefixes
    for dirpath, dirnames, filenames in os.walk(node):
        # exclude all dirs starting with exclude_prefixes
        dirnames[:] = [dirname
                       for dirname in dirnames
                       if not dirname.startswith(exclude_prefixes)]

Il mio caso d'uso era simile a quello di OP, tranne per il fatto che volevo restituire un conteggio del numero totale di sottodirectory all'interno di una determinata cartella. Nel mio caso ho voluto omettere tutte le sottodirectory denominate .git (così come tutte le cartelle che possono essere nidificate all'interno di questi .git cartelle).

In Python 3.6.7, ho scoperto che l'approccio della risposta accettata non funzionava:contava tutti i .git cartella e le relative sottocartelle. Ecco cosa ha funzionato per me:

num_local_subdir = 0
for root, dirs, files in os.walk(local_folder_path):
    if '.git' in dirs:
        dirs.remove('.git')
    num_local_subdir += (len(dirs))

No, non c'è alcuna opzione per os.walk() che salterà quelli. Dovrai farlo da solo (il che è abbastanza facile):

for root, dirs, files in os.walk(path):
    files = [f for f in files if not f[0] == '.']
    dirs[:] = [d for d in dirs if not d[0] == '.']
    # use files and dirs

Nota il dirs[:] = assegnazione delle fette; os.walk attraversa ricorsivamente le sottodirectory elencate in dirs . Sostituendo gli elementi di dirs con quelli che soddisfano un criterio (ad esempio, directory i cui nomi non iniziano con . ), os.walk() non visiterà le directory che non soddisfano i criteri.

Funziona solo se mantieni il topdown argomento della parola chiave a True , dalla documentazione di os.walk() :

Quando topdown è True , il chiamante può modificare sul posto l'elenco dei nomi delle dir (magari usando del o assegnazione slice) e walk() ricorrerà solo nelle sottodirectory i cui nomi rimangono in dirnames; questo può essere utilizzato per sfoltire la ricerca, imporre uno specifico ordine di visita o anche per informare walk() sulle directory che il chiamante crea o rinomina prima di riprendere walk() di nuovo.


Linux
  1. PWD senza collegamenti simbolici?

  2. Unire le cartelle con Mv?

  3. Incolla i file senza delimitatore?

  4. Mv sovrascrive il file di sola lettura senza chiedere conferma?

  5. Utilizzare Ts senza perdere il valore di uscita?

Nascondi cartelle e mostra file nascosti in Ubuntu Linux [Trucco per principianti]

Come vedere file e cartelle nascosti in Debian

Come visualizzare file e cartelle nascosti in Ubuntu File Manager

Come comprimere la cartella su Linux

Installare emacs senza sudo?

Bash:ls * senza raggruppamento di cartelle