Per ottenere una lista di nomi di file e directory (nomi di cartelle) in Python, usate la funzione del modulo os os.listdir().
os.listdir(path='.')
Restituisce una lista contenente i nomi delle voci nella directory specificata da path.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
Il modulo os è incluso nella libreria standard e non ha bisogno di essere installato. Tuttavia, “import” è richiesto.
Le seguenti informazioni sono fornite qui.
- Ottiene una lista di nomi di file e di directory.
- Ottenere un elenco di soli nomi di file
- Ottenere un elenco di soli nomi di directory
Quello che segue è un esempio di struttura di file (directory).
. └── testdir ├── dir1 ├── dir2 ├── file1 ├── file2.txt └── file3.jpg
Oltre a os.listdir(), potete anche usare il modulo glob per ottenere una lista di nomi di file e directory (nomi di cartelle). glob vi permette di specificare le condizioni usando i caratteri jolly (*), ecc. e includere ricorsivamente le sottodirectory.
In Python 3.4 e successivi, è anche possibile ottenere una lista di file e directory usando il modulo pathlib, che può manipolare i percorsi come oggetti. Come i globi di cui sopra, può anche essere usato in modo condizionale e ricorsivo.
Ottiene una lista di nomi di file e di directory.
Se usate os.listdir() così com'è, restituirà una lista di nomi di file e di directory.
import os path = "./testdir" files = os.listdir(path) print(type(files)) # <class 'list'> print(files) # ['dir1', 'dir2', 'file1', 'file2.txt', 'file3.jpg']
Quello che si ottiene è una lista di stringhe di percorso.
Ottenere un elenco di soli nomi di file
Se volete ottenere una lista di soli nomi di file, usate la funzione os.path.isfile() per determinare se il percorso è un file. Passare solo il nome del file come argomento della funzione os.path.isfile() non funzionerà, quindi passate il percorso completo come mostrato sotto.os.path.isfile(os.path.join(path, f))
files = os.listdir(path) files_file = [f for f in files if os.path.isfile(os.path.join(path, f))] print(files_file) # ['file1', 'file2.txt', 'file3.jpg']
Ottenere un elenco di soli nomi di directory
Se volete ottenere solo una lista di nomi di directory, usate os.path.isdir() allo stesso modo.
files = os.listdir(path) files_dir = [f for f in files if os.path.isdir(os.path.join(path, f))] print(files_dir) # ['dir1', 'dir2']