Ottenere informazioni su un file in Python è un’operazione essenziale quando si lavora con il file system, poiché permette di recuperare dettagli quali dimensioni, tipo, permessi e timestamp di modifica. Python offre diverse librerie e funzioni per eseguire queste operazioni, in particolare attraverso i moduli integrati os, os.path, stat e pathlib. In questo articolo, esploreremo i modi più comuni per ottenere informazioni su un file.
Il modulo os è uno strumento potente per interagire con il sistema operativo, e il sottopacchetto os.path contiene funzioni utili per gestire i file e le directory.
Per verificare l’esistenza di un file, è possibile usare la funzione os.path.exists():
import os
file_path = 'file.txt'
if os.path.exists(file_path):
print("Il file esiste.")
else:
print("Il file non esiste.")
Per conoscere le dimensioni di un file, si può usare os.path.getsize():
file_size = os.path.getsize(file_path)
print(f"La dimensione del file è: {file_size} byte")
Il modulo os permette di ottenere informazioni temporali su un file, come la data di creazione, di modifica e di accesso.
import time
mod_time = os.path.getmtime(file_path)
print("Ultima modifica:", time.ctime(mod_time))
access_time = os.path.getatime(file_path)
print("Ultimo accesso:", time.ctime(access_time))
create_time = os.path.getctime(file_path)
print("Data di creazione:", time.ctime(create_time))
Il modulo stat fornisce una maggiore flessibilità nella gestione delle informazioni sui file. Usando os.stat(), è possibile ottenere un oggetto contenente varie informazioni dettagliate.
import os
import stat
file_info = os.stat(file_path)
print("Dimensione del file:", file_info.st_size, "byte")
print("Ultima modifica:", time.ctime(file_info.st_mtime))
print("Ultimo accesso:", time.ctime(file_info.st_atime))
print("Data di creazione:", time.ctime(file_info.st_ctime))
Oltre alle dimensioni e ai timestamp, os.stat() restituisce anche informazioni sui permessi e altre proprietà del file.
Per controllare i permessi di lettura, scrittura ed esecuzione, si possono usare le costanti definite nel modulo stat.
if bool(file_info.st_mode & stat.S_IRUSR):
print("Il file è leggibile.")
if bool(file_info.st_mode & stat.S_IWUSR):
print("Il file è scrivibile.")
if bool(file_info.st_mode & stat.S_IXUSR):
print("Il file è eseguibile.")
A partire da Python 3.4, il modulo pathlib è diventato un’alternativa potente e più intuitiva per lavorare con i percorsi dei file. Questo modulo semplifica molte operazioni che sarebbero più verbose usando os o stat.
Per ottenere informazioni su un file, si inizia creando un oggetto Path per il file desiderato.
from pathlib import Path
file_path = Path('file.txt')
Con pathlib, verificare l’esistenza di un file, controllare se è un file o una directory, e altre operazioni simili, diventano più semplici e leggibili:
if file_path.exists():
print("Il file esiste.")
if file_path.is_file():
print("È un file.")
elif file_path.is_dir():
print("È una directory.")
Anche recuperare le dimensioni del file e i vari timestamp è semplice:
print("Dimensione del file:", file_path.stat().st_size, "byte")
print("Ultima modifica:", file_path.stat().st_mtime)
print("Ultimo accesso:", file_path.stat().st_atime)
print("Data di creazione:", file_path.stat().st_ctime)
pathlib permette inoltre di ottenere timestamp in formato datetime, rendendo il tutto più semplice e leggibile:
from datetime import datetime
mod_time = datetime.fromtimestamp(file_path.stat().st_mtime)
print("Ultima modifica:", mod_time)
Anche se pathlib non ha un supporto diretto per controllare i permessi, si può ottenere lo stesso risultato usando file_path.stat().st_mode e stat:
import stat
if file_path.stat().st_mode & stat.S_IRUSR:
print("Il file è leggibile.")
if file_path.stat().st_mode & stat.S_IWUSR:
print("Il file è scrivibile.")
if file_path.stat().st_mode & stat.S_IXUSR:
print("Il file è eseguibile.")
Conclusione
In Python, il recupero delle informazioni sui file può essere effettuato utilizzando os, stat o pathlib, ognuno dei quali ha i propri vantaggi. Il modulo os è ampiamente compatibile e standard, mentre stat fornisce una visione approfondita sui permessi e altre proprietà avanzate. Tuttavia, per la maggior parte delle operazioni moderne, pathlib è preferito per la sua leggibilità e semplicità.