Usando Python, come posso ottenere una matrice di oggetti info file, basata sulla ricerca di un file system?

StackOverflow https://stackoverflow.com/questions/1617666

  •  06-07-2019
  •  | 
  •  

Domanda

Attualmente ho uno script bash che esegue il comando find , in questo modo:

find /storage/disk-1/Media/Video/TV -name *.avi -mtime -7

Viene visualizzato un elenco di programmi TV che sono stati aggiunti al mio sistema negli ultimi 7 giorni. Continuo quindi a creare alcuni collegamenti simbolici in modo da poter accedere ai miei ultimi programmi TV.

Sto cercando di ricodificare questo in Python, ma ho alcune domande in cui posso sembrare di trovare le risposte per usare Google (forse non sto cercando la cosa giusta). Penso che il modo migliore per riassumere questo sia porre la domanda:

Come eseguo una ricerca sul mio file system (dovrei chiamare find ?) che mi dà una matrice di oggetti info file (contenente la data di modifica, il nome del file, ecc.) in modo che io potrebbe ordinarli in base alla data e ad altre cose del genere?

È stato utile?

Soluzione

import os, time

allfiles = []
now = time.time()

# walk will return triples (current dir, list of subdirs, list of regular files)
# file names are relative to dir at first
for dir, subdirs, files in os.walk("/storage/disk-1/Media/Video/TV"):
    for f in files:
        if not f.endswith(".avi"):
            continue
        # compute full path name
        f = os.path.join(dir, f)
        st = os.stat(f)
        if st.st_mtime < now - 3600*24*7:
            # too old
            continue
        allfiles.append((f, st))

Questo restituirà tutti i file che trovano anche restituiti, come un elenco di coppie (nome file, risultato stat).

Altri suggerimenti

guarda nel modulo os: os.walk è la funzione che percorre il file system, os.path è il modulo che fornisce il file mtime e altre informazioni sul file. anche os.path definisce molte funzioni per analizzare e dividere i nomi dei file.

anche di interesse, il modulo glob definisce una funzione per "globbing" stringhe (corrispondenti a una stringa utilizzando le regole jolly unix)

da questo, costruire un elenco di file che corrisponda ad alcuni criteri dovrebbe essere facile.

  • Puoi utilizzare " find " tramite il "sottoprocesso" modulo.
  • In seguito, utilizza la "quotazione" " funzione stringa per dissezionare ogni riga
  • Per ogni file, utilizzare il modulo del sistema operativo (ad esempio getmtime ecc.) per ottenere informazioni sui file

o

  • Utilizza il " walk " e " glob " moduli per ottenere i percorsi dei file negli oggetti
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top