Vai al contenuto principale

Come ottenere la directory corrente in Python

Per ottenere la directory di lavoro corrente in Python, puoi usare os.getcwd() dal modulo os oppure pathlib.Path.cwd() dal modulo pathlib.
Aggiornato 29 set 2026

Scopri con l'IA

ChatGPTClaudePerplexity

Molti programmi Python devono navigare nel file system per leggere e scrivere file. Un'operazione comune è recuperare la directory di lavoro corrente, spesso abbreviata in CWD.

Python offre due moduli principali per accedere ai percorsi del filesystem: il os module e il modulo pathlib.

Il modulo os offre l'approccio tradizionale per ottenere la directory di lavoro corrente e lavora con i percorsi e il filesystem.

Il pathlib è un modulo più recente che propone un approccio orientato agli oggetti, robusto e multipiattaforma.

In questo tutorial, esploro le varie tecniche per recuperare e manipolare la directory di lavoro corrente. Se vuoi approfondire Python, dai un'occhiata anche ad altri miei post sul blog:

Python: come ottenere la directory di lavoro corrente (CWD)

La directory di lavoro corrente è la directory in cui viene eseguito un programma Python. Funziona come punto di riferimento per i percorsi relativi e consente al programma di accedere a file e risorse all'interno della gerarchia di directory.

Vediamo come accedere alla directory di lavoro corrente usando i moduli os e pathlib e confrontiamo le due soluzioni.

Usando os.getcwd()

Il modulo os consente l'accesso al sistema operativo del computer. La funzione getcwd() recupera la directory di lavoro corrente:

import os
cwd = os.getcwd()
print(cwd)
/Users/sg/Documents/GitHub/datacamp

L'output mostra il percorso della directory che contiene lo script. Il formato del percorso dipende dal sistema operativo. L'output sopra è per sistemi operativi POSIX come Linux, Unix e macOS.

Lo stesso percorso su un sistema Windows apparirebbe così:

C:\Users\sg\Documents\GitHub\datacamp

Il valore restituito da os.getcwd() è una stringa:

print(type(cwd))
<class 'str'>

Di conseguenza, dobbiamo usare metodi e operazioni sulle stringhe per lavorare con questo percorso.

Usando pathlib.Path.cwd()

Python 3.4 ha introdotto il modulo pathlib, che offre un approccio orientato agli oggetti per accedere e manipolare i percorsi dei file. La classe principale in pathlib è Path, che possiamo importare prima di ottenere la directory di lavoro corrente:

from pathlib import Path
cwd = Path.cwd()
print(cwd)
/Users/sg/Documents/GitHub/datacamp

L'output stampato da Path.cwd() sembra simile al valore restituito da os.getcwd(). Tuttavia, Path.cwd() non restituisce una stringa. Possiamo confermarlo stampando il tipo dell'oggetto restituito o mostrando la sua rappresentazione ufficiale come stringa usando repr():

print(type(cwd))
print(repr(cwd))
<class 'pathlib.PosixPath'>
PosixPath('/Users/sg/Documents/GitHub/datacamp')

Su un computer Windows, Path.cwd() restituisce un oggetto WindowsPath.

Gli oggetti PosixPath e WindowsPath offrono funzionalità simili per consentire programmi multipiattaforma. Ecco alcuni attributi di questi oggetti:

print(cwd.parent)
print(cwd.name)
/Users/sg/Documents/GitHub
datacamp

Quando possibile, è preferibile usare il modulo pathlib, che è più moderno e semplifica la gestione dei percorsi. Puoi leggere questa guida completa all'uso di pathlib in Python se vuoi saperne di più.

Lavorare con la directory corrente

Spesso i programmi Python devono manipolare il percorso, ad esempio per salvare un file in una sottocartella. Supponiamo di dover creare una nuova sottodirectory nella nostra directory di lavoro corrente e salvare un file di testo nella nuova cartella.

Usando il modulo os

La funzione getcwd() nel modulo os restituisce una stringa. Quindi è possibile modificare manualmente questa stringa per cambiare il percorso. Tuttavia, le modifiche necessarie variano a seconda del sistema operativo, poiché i diversi sistemi hanno formati di percorso differenti. Un'opzione migliore è usare os.path.join():

import os
cwd = os.getcwd()
output_path = os.path.join(cwd, "testing_os")
print(output_path)
/Users/sg/Documents/GitHub/datacamp/testing_os

Il percorso restituito da os.path.join() è nel formato corretto per il sistema operativo in uso. Restituisce una stringa con il nuovo percorso. Possiamo verificare se questa sottocartella esiste con os.path.exists(), che restituisce un Booleano:

print(os.path.exists(output_path))
False

Questo indica che il percorso rappresentato da output_path non esiste ancora. Il modulo os fornisce strumenti per creare questa cartella. La funzione os.mkdir() crea una nuova directory:

os.mkdir(output_path)
print(os.path.exists(output_path))
True

La nuova sottocartella ora esiste e in questa cartella si possono salvare nuovi file:

output_file = os.path.join(output_path, "test.txt")
with open(output_file, "w") as file:
    file.write("Testing path modification with the 'os' module")

La variabile output_file contiene il nome del file di output desiderato con il percorso completo. Questo file di testo viene creato nella sottocartella /testing_os all'interno della directory di lavoro corrente.

Possiamo anche elencare tutti gli elementi in una cartella usando os.listdir():

for item in os.listdir(output_path):
    print(item)
test.txt

La funzione os.listdir() restituisce un elenco con tutti gli elementi nella directory. Questo codice itera su tale elenco per mostrare ogni file o cartella su una riga separata. In questo esempio, la directory contiene un singolo file di testo.

Usando il modulo pathlib

Il più recente modulo pathlib fornisce anche strumenti per creare nuovi percorsi. Questo modulo utilizza l'operatore slash / per combinare elementi in un percorso. È lo stesso operatore usato per la divisione dei tipi numerici, ma è anche il carattere utilizzato nei percorsi dei file nei sistemi POSIX. Creiamo un nuovo percorso e verifichiamo che non esista già:

from pathlib import Path
cwd = Path.cwd()
output_path = cwd / "testing_pathlib"
print(output_path)
print(Path.exists(output_path))
/Users/sg/Documents/GitHub/datacamp/testing_pathlib
False

La classe Path ha un proprio metodo .mkdir() per creare una nuova directory:

Path.mkdir(output_path)
print(Path.exists(output_path))
True

Dato che output_path è un oggetto PosixPath o WindowsPath, possiamo usare l'operatore slash ovunque per creare un nuovo percorso:

with open(output_path / "test.txt", "w") as file:
    file.write("Testing path modification with the 'pathlib' module")

Il nuovo file di testo viene creato nella cartella /testing_pathlib.

Possiamo usare il metodo .iterdir() di Path per iterare su ciascun elemento in una cartella:

for item in Path.iterdir(output_path):
    print(item)
/Users/sg/Documents/GitHub/datacamp/testing_pathlib/test.txt

Come per gli altri strumenti in pathlib, il valore restituito non è una stringa. È invece un oggetto PosixPath o WindowsPath. Possiamo usare l'attributo .name per mostrare il nome del file o della cartella senza il percorso completo:

for item in Path.iterdir(output_path):
    print(item.name)
test.txt

Mentre os.listdir() restituisce una lista, pathlib.Path.iterdir() restituisce un oggetto generator (puoi leggere questo tutorial su Iteratori e generatori in Python se ti serve un ripasso):

print(Path.iterdir(cwd))
<generator object Path.iterdir at 0x1036b2c20>

Questo comportamento segue le buone pratiche del Python moderno, poiché iteratori e generatori sono più efficienti in determinate situazioni.

Cambiare la directory di lavoro corrente (CWD)

È anche possibile cambiare la directory di lavoro corrente direttamente da un programma Python usando os.chdir(). Poiché non è un'operazione direttamente legata al percorso, non esiste una versione alternativa in pathlib. Tuttavia, possiamo comunque usare oggetti pathlib.Path come argomenti:

import os
from pathlib import Path
cwd = Path.cwd()
print(cwd)

os.chdir(cwd.parent)
cwd = Path.cwd()
print(cwd)
/Users/sg/Documents/GitHub/datacamp
/Users/sg/Documents/GitHub

La directory di lavoro è ora cambiata. Possiamo anche usare cwd.parent.resolve() per gestire correttamente eventuali collegamenti simbolici. L'argomento in os.chdir() può anche essere una stringa, ad esempio i percorsi restituiti dalle funzioni nel modulo os.

È necessaria cautela quando si cambia la directory di lavoro all'interno di un programma, per evitare comportamenti imprevisti.

Buone pratiche e consigli

Ecco alcune buone pratiche e consigli quando lavori con i percorsi in Python:

Buone pratiche per lavorare con i percorsi in Python

Conclusione

Navigare e manipolare i percorsi dei file è un'esigenza comune in molti programmi Python. Il modulo os fornisce le funzioni tradizionali per gestire questi compiti, mentre il modulo pathlib offre un approccio più moderno e orientato agli oggetti. Usare pathlib non solo semplifica molte operazioni, ma assicura anche che il tuo codice resti multipiattaforma e più facile da leggere.

Che tu stia mantenendo un codebase esistente che usa os o iniziando un nuovo progetto in cui puoi sfruttare pathlib, comprendere entrambi i moduli e le loro capacità ti darà la flessibilità e la sicurezza per gestire i percorsi in qualsiasi progetto Python.

Continua il tuo percorso di apprendimento di Python con questi corsi:


Stephen Gruppetta's photo
Author
Stephen Gruppetta
LinkedIn
Twitter

Ho studiato Fisica e Matematica a livello UG presso l’Università di Malta. Poi mi sono trasferito a Londra e ho conseguito il dottorato in Fisica all’Imperial College. Ho lavorato su nuove tecniche ottiche per immagini della retina umana. Ora mi concentro sullo scrivere di Python, comunicare su Python e insegnare Python.

Argomenti
Python

Impara Python con questi corsi!

{count, plural, one {Corso} other {Corsi}}

Introduzione a Python per sviluppatori

{hours} ore
182.5K
Impara le basi della programmazione in Python. Non serve sapere niente prima!
Vedi i dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow
Correlato

{count, plural, one {blog} other {blogs}}

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

{count, plural, one {blog} other {blogs}}

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

{count, plural, one {blog} other {blogs}}

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

Mostra AltroMostra Altro