
Il metodo seek() di Python
Esploriamo insieme il metodo seek() in Python. Questo metodo è un concetto fondamentale quando lavoriamo con i file, permettendoci di spostare il "cursore" di lettura o scrittura in una posizione specifica del file.
seek(offset, whence)
Il metodo accetta due parametri:
- offset è il numero di byte da spostarsi all'interno del file.
- whence è l'opzione che specifica da dove deve iniziare lo spostamento. Può assumere tre valori:
- `0` o `SEEK_SET` inizia dall'inizio del file. E' l'impostazione di default.
- `1` o `SEEK_CUR` si sposta rispetto alla posizione corrente
- `2` o `SEEK_END` si sposta rispetto alla fine del file
Nel caso dei file di testo si può usare solo il secondo parametro a 0 (da inizio file) oppure 2 (da fine file) con offset 0. In altre parole seek(0,2) è ammesso e sposta il cursore alla fine del file.
Questo metodo sposta il cursore del file alla posizione che hai indicato.
Una volta posizionato il cursore, il metodo seek() svuota anche il buffer.
Come funziona? Immagina di avere un libro davanti a te; il metodo seek() ti permette di aprire il libro a una pagina specifica senza dover sfogliare tutte le pagine una ad una.
Ecco un esempio pratico.
Immaginiamo di avere un file di testo chiamato `esempio.txt`, con il seguente contenuto:
Ciao, questo è un file di testo.
La seconda riga inizia qui.
Terza riga, ancora di esempio.
Supponiamo di voler leggere dal file a partire dalla sesto byte (carattere).
In questo caso devi impostare il cursore sul sesto byte tramite seek(6) prima di leggere la riga.
with open('esempio.txt', 'r') as file:
# Spostiamoci al sesto carattere della prima riga
file.seek(6)
contenuto = file.readline()
print(contenuto)
Python salta le prime sei righe, quindi non legge "ciao" e stampa il resto della prima riga dal sesto carattere in poi.
questo è un file di testo.
Il metodo seek ti permette anche di tornare indietro o andare avanti di un certo numero di caratteri durante la lettura del file.
Ad esempio, per tornare all'inizio del file puoi usare seek(0).
with open('esempio.txt', 'r') as file:
# Spostiamoci al sesto carattere della prima riga
file.seek(6)
contenuto = file.readline()
print(contenuto)
# Spostiamoci all'inizio del file
file.seek(0)
contenuto = file.readline()
print(contenuto)
In questo caso, Python legge la prima riga a partire dal sesto carattere.
Poi sposta il cursore in posizione zero e legge la prima riga dall'inizio del file.
questo è un file di testo.
Ciao, questo è un file di testo.
Usando il metodo read() al posto di readline() puoi leggere tutto il contenuto del file a partire dal sesto carattere.
with open('esempio.txt', 'r') as file:
# Spostiamoci all'inizio del file
file.seek(6)
contenuto = file.read()
print(contenuto)
questo è un file di testo.
La seconda riga inizia qui.
Terza riga, ancora di esempio.
E per sovrascrivere un file da un certo punto?
Per sovrascrivere un file a partire da una certa posizione la procedura è un po' più complessa, perché Python non supporta direttamente la scrittura in mezzo a un file senza sovrascrivere i contenuti esistenti.
Di solito, si legge il contenuto in una struttura dati, si modifica, e poi si riscrive il file.
Quando Usare seek(). Il metodo seek() è particolarmente utile quando si lavora con file di grandi dimensioni e si desidera accedere a parti specifiche senza dover caricare l'intero file in memoria. È anche utile per file binari dove si desidera leggere o scrivere dati da/a posizioni specifiche.
Spero che questi esempi pratici ti abbiano aiutato a capire come utilizzare seek() nei tuoi progetti Python!