7.1 Operazioni di base
Hai imparato a lavorare con i file, ora lavoriamo con le directory. A volte è simile al lavoro con i file, a volte no. Le directory hanno la loro specificità. Le funzioni principali per lavorare con le directory sono fornite dai moduli os
e shutil
.
Operazioni di base con le directory:
Creazione di una directory
Per creare una nuova directory si utilizza la funzione os.mkdir()
.
Esempio:
import os
# Creazione di una nuova directory
os.mkdir('new_directory')
print("La directory 'new_directory' è stata creata")
Creazione di più directory nidificate
Per creare più directory nidificate si utilizza la funzione os.makedirs()
.
Esempio:
import os
# Creazione di più directory nidificate
os.makedirs('parent_directory/child_directory')
print("Le directory nidificate 'parent_directory/child_directory' sono state create")
Eliminazione di una directory
Per eliminare una directory vuota si usa la funzione os.rmdir()
. Per eliminare una directory con contenuti si usa la funzione shutil.rmtree()
.
Esempio:
import os
# Eliminazione di una directory vuota
os.rmdir('new_directory')
print("La directory 'new_directory' è stata eliminata")
Esempio di eliminazione di una directory con contenuto:
import shutil
# Eliminazione di una directory con contenuto
shutil.rmtree('parent_directory')
print("La directory 'parent_directory' e tutto il suo contenuto sono stati eliminati")
Importante!
Non eliminare mai una directory con tutto il contenuto. In uno dei 10 casi un bug si insinuerà nel tuo programma e eliminerai metà dei file sul disco. Succede a tutti. Non farlo mai.
Si consiglia di verificare l'esistenza della directory prima di eliminarla usando la funzione os.path.exists()
. Questo può prevenire errori relativi all'eliminazione di una directory inesistente o di un percorso errato.
Esempio:
import os
import shutil
# Verifica dell'esistenza della directory prima della eliminazione
directory_path = 'parent_directory'
if os.path.exists(directory_path):
shutil.rmtree(directory_path)
print(f"La directory '{directory_path}' e tutto il suo contenuto sono stati eliminati")
else:
print(f"La directory '{directory_path}' non esiste, eliminazione impossibile")
7.2 Copia delle directory
Spostamento e rinomina di una directory
Per spostare o rinominare una directory si utilizza la funzione os.rename()
.
import os
# Creazione di una directory per esempio
os.mkdir('original_directory')
# Rinomina di una directory
os.rename('original_directory', 'renamed_directory')
print("La directory 'original_directory' è stata rinominata in 'renamed_directory'")
Copia di una directory
Per copiare una directory si utilizza la funzione shutil.copytree()
. Questa funzione non solo copia il contenuto della directory, ma crea anche una nuova directory nel percorso di destinazione specificato.
import os
import shutil
# Creazione di una directory per esempio
os.mkdir('source_directory')
# Copia di una directory
shutil.copytree('source_directory', 'destination_directory')
print("La directory 'source_directory' è stata copiata in 'destination_directory'")
7.3 Directory corrente
A ogni programma in esecuzione è associato un concetto chiamato "directory di lavoro corrente". Generalmente è la directory in cui viene eseguito il programma e nella quale cerca i suoi file di servizio. Ad esempio, tutti i file di cui i percorsi sono specificati senza nome di directory verranno cercati nella directory corrente.
Ottenere la directory di lavoro corrente
Per ottenere la directory di lavoro corrente si utilizza la funzione os.getcwd()
.
import os
# Ottenere la directory di lavoro corrente
current_directory = os.getcwd()
print(f"Directory di lavoro corrente: {current_directory}")
Cambiare la directory di lavoro corrente
Per cambiare la directory di lavoro corrente si utilizza la funzione os.chdir()
.
import os
# Cambiare la directory di lavoro corrente
os.chdir('new_directory')
print(f"La directory di lavoro corrente è cambiata in: {os.getcwd()}")
Cambiare la directory di lavoro corrente può influenzare i percorsi dei file che vengono indicati rispetto alla directory corrente. Fai attenzione quando cambi la directory, poiché potrebbe causare errori se il programma si aspetta un file nella directory originale.
Verifica dell'esistenza di una directory
Per verificare l'esistenza di una directory si utilizza la funzione os.path.exists()
.
import os
# Verifica dell'esistenza della directory
directory_path = 'new_directory'
if os.path.exists(directory_path):
print(f"La directory '{directory_path}' esiste")
else:
print(f"La directory '{directory_path}' non esiste")
Ottenere il percorso assoluto di una directory
Per ottenere il percorso assoluto si utilizza la funzione os.path.abspath()
.
import os
# Ottenere il percorso assoluto della directory
relative_path = 'example_directory'
absolute_path = os.path.abspath(relative_path)
print(f"Percorso assoluto: {absolute_path}")
7.4 Contenuto della directory
Ottenere un elenco di file e directory
Per ottenere un elenco di file e directory in una directory specificata si utilizza la funzione os.listdir()
.
import os
# Ottenere un elenco di file e directory nella directory corrente
contents = os.listdir('.')
print(f"Contenuto della directory corrente: {contents}")
Puoi lavorare con file e directory non come elenchi di percorsi, ma come oggetti più complessi.
Ottenere informazioni sul contenuto della directory utilizzando os.scandir()
La funzione os.scandir()
restituisce un iteratore che fornisce oggetti DirEntry
per ogni voce nella directory. Questi oggetti contengono informazioni su file e directory, rendendo il loro uso più efficiente rispetto a os.listdir()
, specialmente per cataloghi di grandi dimensioni.
import os
# Ottenere informazioni sul contenuto della directory
with os.scandir('.') as entries:
for entry in entries:
print(f"Nome: {entry.name}, È una directory: {entry.is_dir()}, È un file: {entry.is_file()}")
GO TO FULL VERSION