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: ilos 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:
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ì:
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)Offerto da
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():
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)Offerto da
/Users/sg/Documents/GitHub/datacamp/testing_osOfferto da
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:
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))Offerto da
La nuova sottocartella ora esiste e in questa cartella si possono salvare nuovi file:
output_file = os.path.join(output_path,"test.txt")withopen(output_file,"w")asfile:file.write("Testing path modification with the 'os' module")Offerto da
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)Offerto da
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))Offerto da
/Users/sg/Documents/GitHub/datacamp/testing_pathlib
FalseOfferto da
La classe Path ha un proprio metodo .mkdir() per creare una nuova directory:
Path.mkdir(output_path)print(Path.exists(output_path))Offerto da
Dato che output_path è un oggetto PosixPath o WindowsPath, possiamo usare l'operatore slash ovunque per creare un nuovo percorso:
withopen(output_path /"test.txt","w")asfile:file.write("Testing path modification with the 'pathlib' module")Offerto da
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)Offerto da
/Users/sg/Documents/GitHub/datacamp/testing_pathlib/test.txtOfferto da
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)Offerto da
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):
<generator object Path.iterdir at 0x1036b2c20>Offerto da
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)Offerto da
/Users/sg/Documents/GitHub/datacamp
/Users/sg/Documents/GitHubOfferto da
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:
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:
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.
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.
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
osmodule e il modulopathlib.Il modulo
osoffre 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
osepathlibe confrontiamo le due soluzioni.Usando
os.getcwd()Il modulo
osconsente l'accesso al sistema operativo del computer. La funzionegetcwd()recupera la directory di lavoro corrente: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ì:
Il valore restituito da
os.getcwd()è una stringa: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 inpathlibèPath, che possiamo importare prima di ottenere la directory di lavoro corrente:L'output stampato da
Path.cwd()sembra simile al valore restituito daos.getcwd(). Tuttavia,Path.cwd()non restituisce una stringa. Possiamo confermarlo stampando il tipo dell'oggetto restituito o mostrando la sua rappresentazione ufficiale come stringa usandorepr():Su un computer Windows,
Path.cwd()restituisce un oggettoWindowsPath.Gli oggetti
PosixPatheWindowsPathoffrono funzionalità simili per consentire programmi multipiattaforma. Ecco alcuni attributi di questi oggetti: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
osLa funzione
getcwd()nel moduloosrestituisce 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 è usareos.path.join():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 conos.path.exists(), che restituisce un Booleano:Questo indica che il percorso rappresentato da
output_pathnon esiste ancora. Il moduloosfornisce strumenti per creare questa cartella. La funzioneos.mkdir()crea una nuova directory:La nuova sottocartella ora esiste e in questa cartella si possono salvare nuovi file:
La variabile
output_filecontiene il nome del file di output desiderato con il percorso completo. Questo file di testo viene creato nella sottocartella/testing_osall'interno della directory di lavoro corrente.Possiamo anche elencare tutti gli elementi in una cartella usando
os.listdir():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
pathlibIl più recente modulo
pathlibfornisce 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à:La classe
Pathha un proprio metodo.mkdir()per creare una nuova directory:Dato che
output_pathè un oggettoPosixPathoWindowsPath, possiamo usare l'operatore slash ovunque per creare un nuovo percorso:Il nuovo file di testo viene creato nella cartella
/testing_pathlib.Possiamo usare il metodo
.iterdir()diPathper iterare su ciascun elemento in una cartella:Come per gli altri strumenti in
pathlib, il valore restituito non è una stringa. È invece un oggettoPosixPathoWindowsPath. Possiamo usare l'attributo.nameper mostrare il nome del file o della cartella senza il percorso completo:Mentre
os.listdir()restituisce una lista,pathlib.Path.iterdir()restituisce un oggettogenerator(puoi leggere questo tutorial su Iteratori e generatori in Python se ti serve un ripasso):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 inpathlib. Tuttavia, possiamo comunque usare oggettipathlib.Pathcome argomenti:La directory di lavoro è ora cambiata. Possiamo anche usare
cwd.parent.resolve()per gestire correttamente eventuali collegamenti simbolici. L'argomento inos.chdir()può anche essere una stringa, ad esempio i percorsi restituiti dalle funzioni nel moduloos.È 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:
Conclusione
Navigare e manipolare i percorsi dei file è un'esigenza comune in molti programmi Python. Il modulo
osfornisce le funzioni tradizionali per gestire questi compiti, mentre il modulopathliboffre un approccio più moderno e orientato agli oggetti. Usarepathlibnon 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
oso iniziando un nuovo progetto in cui puoi sfruttarepathlib, 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: