CodeGym /Corsi /Python SELF IT /Lavorare con le directory

Lavorare con le directory

Python SELF IT
Livello 21 , Lezione 6
Disponibile

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()}")
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION