Il modulo Python pathlib è un metodo molto efficace per in­te­ra­gi­re con i percorsi del file system in questo lin­guag­gio di pro­gram­ma­zio­ne. In par­ti­co­la­re, oltre alla maggiore facilità d’uso, un grande vantaggio di questo modulo è la maggiore con­ci­sio­ne del codice.

Che cos’è Python pathlib?

Nell’ap­prez­za­to lin­guag­gio di pro­gram­ma­zio­ne Python sono di­spo­ni­bi­li diversi metodi per lavorare con i percorsi del file system. A partire dalla versione 3.4, Python dispone di pathlib, un ulteriore strumento molto utile e completo per in­te­ra­gi­re con i percorsi o “path” in­di­pen­den­te­men­te dal sistema operativo.

Il modulo è par­ti­co­lar­men­te utile se non vuoi soltanto leggere o mo­di­fi­ca­re i percorsi, ma anche eseguire ulteriori attività e fasi di lavoro. Tra le altre cose, esso consente anche di creare e copiare singoli file e parti di essi. Queste ope­ra­zio­ni sono agevolate so­prat­tut­to dall’in­ter­fac­cia generale di Python pathlib. Il modulo fa parte della libreria standard e so­sti­tui­sce o combina numerosi altri metodi.

Managed Nextcloud di IONOS Cloud
Lavora con il tuo team sul cloud
  • Massima sicurezza dei tuoi dati
  • Strumenti di col­la­bo­ra­zio­ne per lavorare in team
  • Ag­gior­na­men­ti au­to­ma­ti­ci

Rap­pre­sen­ta­zio­ne dei percorsi orientata agli oggetti

Uno dei grandi vantaggi del modulo Python pathlib è che consente agli utenti di rap­pre­sen­ta­re i percorsi non più sotto forma di stringhe, bensì in modo orientato agli oggetti. Mentre l’approccio pre­ce­den­te risultava spesso scomodo e ri­chie­de­va di uti­liz­za­re più istru­zio­ni anche per compiti semplici, la sintassi del nuovo modulo è stata no­te­vol­men­te sem­pli­fi­ca­ta. Poiché di solito lavorerai con la classe Path, ti con­si­glia­mo di im­por­tar­la prima di lavorare su un progetto. In questo modo potrai scrivere codice più compatto nelle fasi suc­ces­si­ve. Per l’im­por­ta­zio­ne è suf­fi­cien­te uti­liz­za­re il seguente comando:

from pathlib import Path
python

Per creare un’istanza Path puoi uti­liz­za­re subito Python pathlib. A tal fine è utile il seguente codice, che contiene i due com­po­nen­ti “colori” e “blu.txt”. Con un semplice comando viene quindi creata una nuova istanza:

from pathlib import Path
blu = Path("colori", "blu.txt")
print(blu)
python

Il risultato dovrebbe essere quindi simile a questo:

colori/blu.txt
python

Python inserisce quindi il se­pa­ra­to­re del sistema operativo tra le due parti del risultato. Nel nostro esempio si tratta di una barra obliqua rivolta verso destra come “/”, ma l’output su un computer Windows potrebbe invece pre­sen­ta­re una barra ro­ve­scia­ta o backslash come “\”. Linux e macOS uti­liz­za­no invece la barra obliqua normale.

Apertura di cartelle con Python pathlib

Dopo aver importato Path, è possibile uti­liz­za­re i diversi metodi della classe per mezzo di Python pathlib. Tra questi vi è anche l’accesso a cartelle spe­ci­fi­che. Ad esempio, eseguendo il codice seguente puoi ri­chia­ma­re la tua attuale cartella di lavoro:

from pathlib import Path
Path.cwd()
python

Questa pos­si­bi­li­tà è im­por­tan­te, ad esempio, quando desideri aprire un file nella stessa cartella in cui è in ese­cu­zio­ne lo script corrente.

Inoltre, con Python pathlib puoi accedere anche alla cartella prin­ci­pa­le dell’utente corrente. È con­si­glia­bi­le scegliere questa cartella come punto di partenza per poter poi lavorare con i percorsi cor­ri­spon­den­ti anche su computer diversi, se ne­ces­sa­rio. Il codice per farlo è questo:

from pathlib import Path
Path.home()
python

Accesso per mezzo di una stringa

Invece di iniziare dalla cartella di lavoro o dalla cartella prin­ci­pa­le, anche con Python pathlib puoi comunque con­ti­nua­re a uti­liz­za­re una stringa per gestire un file o una cartella. Ad esempio, in questo caso il codice si pre­sen­te­reb­be così:

from pathlib import Path
Path(r"C:\Utenti\nome\cartella\file.txt")
python

La stringa viene con­ver­ti­ta in un percorso e può essere quindi uti­liz­za­ta più fa­cil­men­te. La piccola r davanti alla stringa la con­trad­di­stin­gue come una co­sid­det­ta “stringa letterale grezza”. In questo modo si ga­ran­ti­sce che la barra ro­ve­scia­ta sia uti­liz­za­ta ef­fet­ti­va­men­te come tale. In caso contrario è possibile uti­liz­za­re la backslash anche per iden­ti­fi­ca­re una variabile non stam­pa­bi­le.

Col­le­ga­men­to di percorsi o stringhe

Un altro metodo per creare un nuovo percorso con Python pathlib è collegare i singoli percorsi o le singole stringhe. Per farlo hai due soluzioni.

La prima è uti­liz­za­re una singola barra obliqua per collegare due elementi e creare un nuovo percorso. Ad esempio, il codice potrebbe essere questo:

from pathlib import Path
for file_path in Path.cwd().glob("*.txt"):
	nuovo_percorso = Path("esempio") / file_path.name
	file_path.rename(nuovo_percorso)
python

In al­ter­na­ti­va puoi uti­liz­za­re il metodo joinpath() e ottenere lo stesso risultato:

from pathlib import Path
Path.home().joinpath("esempio", "sottocartella", "file.py")
python

Utilizzo di singoli com­po­nen­ti

Python pathlib ti offre anche lo strumento adatto per scomporre un percorso nei suoi com­po­nen­ti e usarli. Il codice seguente riporta alcuni esempi per farlo:

from pathlib import Path
path = Path(r"C:\Utenti\nome\cartella\file.txt")
path
path.anchor
path.name
path.parent
path.parent.parent
path.stem
path.suffix
python
  • .anchor: tiene conto della parte che precede le cartelle vere e proprie, che può anche variare a seconda del sistema operativo
  • .name: tiene conto solo del nome del file senza alcun ri­fe­ri­men­to alla cartella
  • .parent: tiene conto della cartella in cui si trova un file e, se il percorso stesso è una cartella, viene uti­liz­za­ta la cartella prin­ci­pa­le
  • .stem: tiene conto solo del nome del file senza con­si­de­ra­re l’esten­sio­ne
  • .suffix: tiene conto solo dell’esten­sio­ne del file

Il risultati cor­ri­spon­den­ti sarebbero quindi i seguenti:

'C:\\'
'file.txt'
WindowsPath('C:/Utenti/nome/cartella')
WindowsPath('C:/Utenti/nome/')
'file'
'.txt'
python

Lettura o scrittura di file

Sebbene sia possibile scrivere o leggere file anche in altro modo, Python pathlib ti permette di sem­pli­fi­ca­re no­te­vol­men­te il codice. Per il­lu­stra­re meglio come funziona, creiamo una semplice lista di animali e piante. Ad esempio:

<!-- lista.md ->
# Lista
## Animali
* Cane
* Gatto
* Topo
## Piante
* Rosa
* Margherita
text

Ora sfrut­tia­mo la funzione standard open() con Python pathlib per filtrare e vi­sua­liz­za­re tutti gli animali e le piante della lista. Il relativo codice si presenta così:

from pathlib import Path
path = Path.cwd() / "lista.md"
with path.open(mode="r", encoding="utf-8") as md_file:
	content = md_file.read()
	risultato = [line for line in content.splitlines() if line.startswith("*")
python

Modifica dei nomi dei file

Per cambiare i nomi dei file con Python pathlib sono suf­fi­cien­ti poche righe di codice. Il modulo utilizza il metodo .with_name(), che permette di mo­di­fi­ca­re il nome e l’esten­sio­ne di un file. Il codice da usare segue questo schema:

from pathlib import Path
md_path = Path("/Utenti/nome/cartella/blu.md")
txt_path = md_path.with_name("rosso.txt")
md_path.replace(txt_path)
python

Copia di file con Python pathlib

Anche se path non dispone di un metodo per la copia, è possibile uti­liz­za­re .with_stem() per duplicare un file. A tal fine viene creato un nuovo nome di file senza mo­di­fi­car­ne l’esten­sio­ne. Quello che segue è un esempio di codice per farlo:

from pathlib import Path
source = Path("lista.md")
destination = source.with_stem("nuovo_esempio")
destination.write_bytes(source.read_bytes())
python

Spo­sta­men­to di file

È possibile spostare o eliminare file con Python pathlib, ma devi ricordare che il sistema non pre­sen­te­rà ulteriori domande di sicurezza. Per questo motivo devi fare at­ten­zio­ne a non perdere in­for­ma­zio­ni im­por­tan­ti. Per spostare un file, utilizza .replace(). Se nel percorso di de­sti­na­zio­ne è già presente un file con lo stesso nome, quest’ultimo verrà so­vra­scrit­to. Anche in questo caso devi as­si­cu­rar­ti di aver fatto la scelta giusta. Esiste comunque la pos­si­bi­li­tà di ve­ri­fi­ca­re in anticipo il rischio di perdere in­for­ma­zio­ni. In generale, il codice da usare è questo:

from pathlib import Path
source = Path("blu.py")
destination = Path("rosso.py")
if not destination.exists():
	source.replace(destination)
python

Creazione di file vuoti

Utilizza questo codice per creare un file vuoto con Python pathlib:

from pathlib import Path
filename = Path("nuovo.txt")
filename.exists()
filename.touch()
filename.exists()
filename.touch()
python
Consiglio

Dritto alla meta con GitHub: Deploy Now di IONOS ti permette di uti­liz­za­re i de­ploy­ment au­to­ma­ti­ci in soli tre passaggi. Grazie al principio “push, build and deploy” puoi apportare le modifiche in modo ancora più veloce. Non esitare a con­tat­tar­ci per saperne di più sui nostri diversi piani tariffari.

Vai al menu prin­ci­pa­le