Il modulo stat definisce costanti e funzioni per interpretare i risultati di os.stat(), os.fstat() e os.lstat() (se esistono). Per dettagli più esaustivi sulle funzioni di sistema stat(), fstat() e lstat(), consultate la documentazione del vostro sistema.
Il modulo stat definisce le seguenti funzioni per fare verifiche su specifici tipi di file.
mode) |
mode) |
mode) |
mode) |
mode) |
mode) |
mode) |
Sono inoltre definite due funzioni che manipolano in modo più generale il ``modo'' del file:
mode) |
mode) |
Normalmente, si usano le le funzion os.path.is*() per verificare il tipo di file; le funzioni descritte in questa sezione sono utili quando si stanno facendo controlli multipli sullo stesso file e si vuole evitare il lavoro aggiuntivo che si otterrebbe dall'esecuzione di stat() per ogni singolo controllo. Queste funzioni sono anche utili quando si vogliono controllare le informazioni su file non gestiti da os.path, come ad esempio i file che rappresentano dispositivi con interfaccia a carattere o a blocchi.
Tutte le variabili elencate in seguito sono semplicemente indici simbolici nella decupla restituita da os.stat(), os.fstat() o os.lstat().
L'interpretazione del termine ``dimensione del file'' cambia a secondo del tipo di file. Per file di tipo regolare, rappresenta la dimensione effettiva in byte. Per FIFO e socket, in molte varianti di Unix (incluso ed in particolar modo Linux), la ``dimensione'' corrisponde al numero di byte in attesa di essere letti al momento in cui si è chiamato os.stat(), os.fstat(), oppure os.lstat(); questo può qualche volta essere utile, specialmente per interrogare periodicamente questi tipi di file speciali dopo averli aperti in modo non bloccante. Il significato del campo 'size', per altri file rappresentanti dispositivi a carattere e a blocchi, varia in misura maggiore e dipende molto dall'implementazione della funzione di sistema operativo sottostante.
Esempio:
import os, sys from stat import * def walktree(top, callback): '''discende ricorsivamente un albero di directory con radice in top, chiamando la funzione callback per ogni file di tipo regolare incontrato''' for f in os.listdir(top): pathname = os.path.join(top, f) mode = os.stat(pathname)[ST_MODE] if S_ISDIR(mode): # E` una directory, va analizzata ricorsivamente walktree(pathname, callback) elif S_ISREG(mode): # E` un file, chiama la funzione callback callback(pathname) else: # E` un file di tipo sconosciuto, stampa un messaggio print 'Escludo %s' % pathname def visitfile(file): print 'Sto analizzando ', file if __name__ == '__main__': walktree(sys.argv[1], visitfile)